综合平台编辑器
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

73 satır
1.7 KiB

  1. #ifndef CUSTOMGRAPHICS_H
  2. #define CUSTOMGRAPHICS_H
  3. #include <QGraphicsObject>
  4. // 只需要前向声明,因为头文件中只用到了指针
  5. class QPainter;
  6. class QGraphicsSceneMouseEvent;
  7. class QGraphicsSceneContextMenuEvent;
  8. enum class ComponentType {
  9. Button,
  10. Indicator
  11. };
  12. // HMI组件基类
  13. class HmiComponent : public QGraphicsObject
  14. {
  15. Q_OBJECT
  16. Q_PROPERTY(QColor color READ color WRITE setColor)
  17. Q_PROPERTY(QString componentName READ componentName WRITE setComponentName)
  18. signals:
  19. void selected(HmiComponent* item);
  20. // 为复制和删除请求添加信号
  21. void copyRequested(HmiComponent* item);
  22. void deleteRequested(HmiComponent* item);
  23. public:
  24. explicit HmiComponent(QGraphicsItem *parent = nullptr);
  25. void setColor(const QColor& color);
  26. QColor color() const;
  27. void setComponentName(const QString& name);
  28. QString componentName() const;
  29. void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
  30. protected:
  31. void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
  32. // 重写上下文菜单事件
  33. void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
  34. virtual void paintShape(QPainter* painter) = 0;
  35. protected:
  36. QColor m_color;
  37. QString m_componentName;
  38. };
  39. // 按钮类
  40. class HmiButton : public HmiComponent
  41. {
  42. public:
  43. HmiButton(QGraphicsItem *parent = nullptr);
  44. QRectF boundingRect() const override;
  45. protected:
  46. void paintShape(QPainter *painter) override;
  47. };
  48. // 指示灯类
  49. class HmiIndicator : public HmiComponent
  50. {
  51. public:
  52. HmiIndicator(QGraphicsItem *parent = nullptr);
  53. QRectF boundingRect() const override;
  54. protected:
  55. void paintShape(QPainter *painter) override;
  56. };
  57. #endif // CUSTOMGRAPHICS_H