您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

45 行
1.7 KiB

  1. #pragma once
  2. #include <QVariantMap>
  3. #include "hmicontrolitem.h"
  4. // HMI指示灯控件类,继承自HmiControlItem,实现指示灯特有的功能
  5. class HmiLed : public HmiControlItem {
  6. Q_OBJECT
  7. public:
  8. // 构造函数,初始化指示灯控件
  9. explicit HmiLed(QGraphicsItem* parent = nullptr);
  10. // 返回指示灯的边界矩形(固定大小60x60,带调整边距)
  11. QRectF boundingRect() const override;
  12. // 绘制指示灯(根据ON/OFF状态绘制不同颜色)
  13. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
  14. // 返回控件类型(固定为“指示灯”)
  15. QString getItemType() const override { return "指示灯"; }
  16. // 保存指示灯数据到剪贴板(位置、缩放、状态、颜色等)
  17. QVariantMap saveToClipboard() const override;
  18. // 设置ON状态颜色,触发重绘
  19. void setOnColor(const QColor& color) { m_ledOnColor = color; update(); }
  20. // 设置OFF状态颜色,触发重绘
  21. void setOffColor(const QColor& color) { m_ledOffColor = color; update(); }
  22. // 设置指示灯状态(ON/OFF),供外部调用(如寄存器状态变化),触发重绘
  23. void setLedState(bool on);
  24. protected:
  25. // 返回宽高比(指示灯为正方形,固定为1.0)
  26. qreal getAspectRatio() const override { return 1.0; }
  27. // 创建指示灯的右键菜单(包含复制、删除、颜色设置等,不包含置ON/OFF)
  28. void createContextMenu(QMenu& menu) override;
  29. private:
  30. bool m_isLedOn = false; // 指示灯状态(true为ON,false为OFF)
  31. QColor m_ledOnColor = Qt::green; // ON状态颜色
  32. QColor m_ledOffColor = Qt::red; // OFF状态颜色
  33. };