#ifndef CUSTOMGRAPHICS_H #define CUSTOMGRAPHICS_H #include // 只需要前向声明,因为头文件中只用到了指针 class QPainter; class QGraphicsSceneMouseEvent; class QGraphicsSceneContextMenuEvent; enum class ComponentType { Button, Indicator }; // HMI组件基类 class HmiComponent : public QGraphicsObject { Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(QString componentName READ componentName WRITE setComponentName) signals: void selected(HmiComponent* item); // 为复制和删除请求添加信号 void copyRequested(HmiComponent* item); void deleteRequested(HmiComponent* item); public: explicit HmiComponent(QGraphicsItem *parent = nullptr); void setColor(const QColor& color); QColor color() const; void setComponentName(const QString& name); QString componentName() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override; // 重写上下文菜单事件 void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; virtual void paintShape(QPainter* painter) = 0; protected: QColor m_color; QString m_componentName; }; // 按钮类 class HmiButton : public HmiComponent { public: HmiButton(QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; protected: void paintShape(QPainter *painter) override; }; // 指示灯类 class HmiIndicator : public HmiComponent { public: HmiIndicator(QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; protected: void paintShape(QPainter *painter) override; }; #endif // CUSTOMGRAPHICS_H