#include "eyemap.h" #include "ui_eyemap.h" #include #include #include EyeMap::EyeMap(QWidget *parent) : QWidget(parent), ui(new Ui::EyeMap) { ui->setupUi(this); m_logger = spdlog::get("OSC"); if(m_logger == nullptr) { SPDLOG_ERROR("获取 OSC logger 失败"); return; } /* 自定义大小 */ setFixedSize(1600, 900); /* 初始化全局数据 */ g_eyeMapMatrix.initEyeMapData(this->width(), this->height()); /* 设置定时器 */ m_timer.setTimerType(Qt::PreciseTimer); m_timer.setSingleShot(false); m_timer.start(16); /* 16ms刷新一次,大约120帧 */ connect(this, &EyeMap::signal_update, this, &EyeMap::do_update); connect(&m_timer, &QTimer::timeout, this, &EyeMap::do_update); SPDLOG_LOGGER_INFO(m_logger, "EyeMap 初始化成功"); } EyeMap::~EyeMap() { delete ui; } /* 刷新页面 */ void EyeMap::do_update() { update(); } /** * @brief 绘制图形 * * @param event */ void EyeMap::paintEvent(QPaintEvent *event) { g_eyeMapMatrix.mutexEyeData.lock(); QPainter painter(this); QPen pen; pen.setColor(Qt::black); pen.setWidth(1); pen.setStyle(Qt::SolidLine); QBrush brush; brush.setColor(Qt::white); brush.setStyle(Qt::SolidPattern); painter.setRenderHint(QPainter::Antialiasing, true); /* 绘制背景 */ painter.setPen(pen); painter.setBrush(brush); painter.drawRect(0, 0, this->width(), this->height()); /* 绘制刻度 */ /* 绘制网格 */ /* 绘制眼图,就是绘制 1000 * 256 个矩形 */ painter.setPen(QPen(Qt::NoPen)); for(int i = 0; i < 1000; i++) { for(int j = 0; j < 256; j++) { if(g_eyeMapMatrix.dataMatrix[i][j].isDraw == false) { continue; } // painter.setBrush(QBrush(g_eyeMapMatrix.dataMatrix[i][j].color)); painter.setBrush(g_eyeMapMatrix.dataMatrix[i][j].brush); painter.drawRect(g_eyeMapMatrix.dataMatrix[i][j].rect); } } g_eyeMapMatrix.mutexEyeData.unlock(); event->accept(); }