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