123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #include "eyemap.h"
- #include "ui_eyemap.h"
- #include <QApplication>
- #include <QPainter>
- #include <QPaintEvent>
- 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());
- /* 绘制中线 */
- int width = this->width();
- int height = this->height();
- pen.setColor(QColor(220, 220, 220));
- pen.setWidth(2);
- painter.setPen(pen);
- painter.drawLine(0, height / 2, width, height / 2); /* 绘制水平中线 */
- painter.drawLine(width / 2, 0, width / 2, height); /* 绘制垂直中线 */
- /* 绘制中线上的刻度 */
- double scaleW = width / 50.0;
- double scaleH = height / 50.0;
- QVector<QLineF> wLines;
- QVector<QLineF> hLines;
- for(int i = 0; i < 50; i++)
- {
- QLineF line1(i * scaleW, height / 2.0 - 4, i * scaleW, height / 2.0 + 4);
- wLines.append(line1);
- QLineF line2(width / 2.0 - 4, i * scaleH, width / 2.0 + 4, i * scaleH);
- hLines.append(line2);
- }
- painter.drawLines(wLines);
- painter.drawLines(hLines);
- /* 绘制网格,网格点之间的间距是固定的 */
- pen.setWidth(1);
- painter.setPen(pen);
- scaleW = width / 10.0;
- scaleH = height / 10.0;
- int x = 0;
- int y = 0;
- QVector<QLineF> wGridLines;
- QVector<QLineF> hGridLines;
- for(int i = 1; i < 10; i++)
- {
- y = i * scaleH;
- while(true)
- {
- x = x + 8;
- QLineF line1(x, y, x + 2, y);
- wGridLines.append(line1);
- if(x >= width)
- {
- x = 0;
- y = 0;
- break;
- }
- }
- }
- x = 0;
- y = 0;
- for(int i = 1; i < 10; i++)
- {
- x = i * scaleW;
- while(true)
- {
- y = y + 8;
- QLineF line1(x, y, x, y + 2);
- hGridLines.append(line1);
- if(y >= height)
- {
- x = 0;
- y = 0;
- break;
- }
- }
- }
- painter.drawLines(wGridLines);
- painter.drawLines(hGridLines);
-
- /* 绘制眼图,就是绘制 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();
- }
|