OneEyeMap.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef ONEEYEMAP_H
  2. #define ONEEYEMAP_H
  3. #include <QWidget>
  4. #include <memory>
  5. #include <QTimer>
  6. #include "spdlog/spdlog.h"
  7. #include "EyeMapInfo.h"
  8. #include "OscDataInfo.h"
  9. namespace Ui {
  10. class OneEyeMap;
  11. }
  12. class OneEyeMap : public QWidget
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit OneEyeMap(QWidget *parent = nullptr);
  17. ~OneEyeMap();
  18. /* 根据通道号获取数据指针 */
  19. void setEyeDataPtrFromOscData(OscChnNum channel);
  20. /* 设置对应的示波器是否已经打开 */
  21. void setOpen(bool isOpen) { m_isOpen = isOpen; }
  22. /* 获取UID */
  23. EyeMapUID getUID() { return m_info.uid; }
  24. /* 设置序号 */
  25. void setNum(int num) { m_info.num = num; }
  26. /* 获取序号 */
  27. int getNum() { return m_info.num; }
  28. /* 设置标题 */
  29. void setTitle(const QString &title);
  30. /* 获取标题 */
  31. QString getTitle() { return m_info.title; }
  32. /* 设置颜色 */
  33. void setTitleBarColor(const QColor &color);
  34. /* 获取颜色 */
  35. QColor getTitleBarColor() { return m_info.titleBarColor; }
  36. /* 设置是否显示 */
  37. void setShow(bool isShow);
  38. /* 获取是否显示 */
  39. bool getShow() { return m_info.isShow; }
  40. /* 设置通道信息 */
  41. void setChannelInfo(const OneChannelInfo &info) { m_info.channelInfo = info; }
  42. /* 获取通道信息 */
  43. OneChannelInfo& getChannelInfo() { return m_info.channelInfo; }
  44. /* 设置电压值 */
  45. void setVoltageRange(OscVoltageRange range);
  46. /* 获取电压值 */
  47. OscVoltageRange getVoltageRange() { return m_info.voltageRange; }
  48. /* 设置时间刻度 */
  49. void setTimeGridValue(OscTimeGridValue value) { m_info.tGridValue = value; }
  50. /* 获取时间刻度 */
  51. OscTimeGridValue getTimeGridValue() { return m_info.tGridValue; }
  52. /* 更新组件信息 */
  53. void updateInfo(const OneEyeMapInfo &info);
  54. /* 只更新设置个数页面的信息 */
  55. void updateSettingNum(const OneEyeMapInfo &info);
  56. /* 获取眼图显示区域的大小 */
  57. QSize getEyeMapSize() { return m_rectEyeMap.size(); }
  58. signals:
  59. void signal_update();
  60. private slots:
  61. void do_update();
  62. protected:
  63. void paintEvent(QPaintEvent *event) override;
  64. /* 缩放事件 */
  65. void resizeEvent(QResizeEvent *event) override;
  66. private:
  67. /* 绘制背景 */
  68. void drawBackground(QPainter &painter);
  69. /* 绘制刻度值区域 */
  70. void drawScaleValue(QPainter &painter);
  71. /* 绘制刻度 */
  72. void drawScale(QPainter &painter);
  73. /* 绘制眼图区域 */
  74. void drawEyeMap(QPainter &painter);
  75. /* 绘制暂无设备 */
  76. inline void drawNoDevice(QPainter &painter);
  77. /* 获取一个格子的电压值 */
  78. inline QString getVScaleValue(int index);
  79. /* 获取一个时间值 */
  80. inline QString getTimeValue(int index);
  81. private:
  82. Ui::OneEyeMap *ui;
  83. std::shared_ptr<spdlog::logger> m_logger = nullptr;
  84. /* 组件属性信息 */
  85. bool m_isOpen = false; /* 是否示波器 */
  86. OneEyeMapInfo m_info; /* 组件信息 */
  87. QTimer m_timer;
  88. /* 眼图显示布局 */
  89. QRect m_rectScaleValue; /* 刻度值区域,除了标题栏之外的其他区域,包括下面的眼图区域 */
  90. QRect m_rectEyeMap; /* 眼图区域 */
  91. QRect m_rectRefColor; /* 参考颜色区域 */
  92. QRect m_rectNoDevice; /* 暂无设备区域 */
  93. int m_leftMargin = 0; /* 眼图距离刻度区域的左边距 */
  94. int m_topMargin = 0; /* 眼图距离刻度区域的上边距 */
  95. int m_rightMargin = 0; /* 眼图距离刻度区域的右边距 */
  96. int m_bottomMargin = 0; /* 眼图距离刻度区域的下边距 */
  97. int m_hScaleNum = 0; /* 水平刻度 */
  98. int m_vScaleNum = 0; /* 垂直刻度 */
  99. /* 眼图属性 */
  100. // OscVoltageRange m_cRange = OscVoltageRange::CR_2V5; /* 通道输入档位 */
  101. // OscTimeGridValue m_tGridValue = OscTimeGridValue::TGV_200NS; /* 时间刻度值 */
  102. EyeMapMatrix* m_eyeMapMatrix = nullptr; /* 眼图矩阵,从外面获取 */
  103. QPixmap* m_pixmapNoDevice = nullptr; /* 暂无设备图片 */
  104. QPixmap* m_pixmapDeviceOffline = nullptr; /* 设备离线图片 */
  105. };
  106. #endif // ONEEYEMAP_H