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

45 行
1.6 KiB

  1. #pragma once
  2. #include <QVariantMap>
  3. #include "hmicontrolitem.h"
  4. #include <QGraphicsSceneMouseEvent>
  5. // HMI按钮控件类,继承自HmiControlItem,实现按钮特有的功能
  6. class HmiButton : public HmiControlItem {
  7. Q_OBJECT
  8. public:
  9. // 构造函数,初始化按钮控件
  10. explicit HmiButton(QGraphicsItem* parent = nullptr);
  11. // 返回按钮的边界矩形(固定大小80x40,带调整边距)
  12. QRectF boundingRect() const override;
  13. // 绘制按钮(根据ON/OFF状态绘制不同颜色和文本)
  14. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
  15. // 返回控件类型名称(用于创建/保存等)
  16. QString getItemType() const override { return "按钮"; }
  17. // 保存按钮数据到剪贴板(包含状态与颜色)
  18. QVariantMap saveToClipboard() const override;
  19. // 设置ON/OFF颜色(给现有创建/粘贴流程用)
  20. void setOnColor(const QColor& color) { m_buttonOnColor = color; update(); }
  21. void setOffColor(const QColor& color) { m_buttonOffColor = color; update(); }
  22. // 设置按钮ON/OFF;当状态发生变化时,会发出 stateChanged() 供 Modbus 写线圈
  23. void setButtonState(bool on);
  24. signals:
  25. void stateChanged(bool on); // 新增:按钮状态变化信号
  26. protected:
  27. // 右键菜单(保留已有:复制/删除/置ON/置OFF/改颜色/设置寄存器)
  28. void createContextMenu(QMenu& menu) override;
  29. private:
  30. bool m_isButtonOn = false; // 按钮状态(true为ON,false为OFF)
  31. QColor m_buttonOnColor = Qt::blue; // ON状态颜色
  32. QColor m_buttonOffColor = Qt::lightGray; // OFF状态颜色
  33. };