Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

73 linhas
2.4 KiB

  1. #ifndef HMIWIDGET_H
  2. #define HMIWIDGET_H
  3. #include <QGraphicsRectItem>
  4. #include <QGraphicsEllipseItem>
  5. #include <QGraphicsSceneMouseEvent>
  6. #include <QCursor>
  7. #include <QPainter>
  8. // 可调整大小的形状模板基类
  9. template <typename BaseShape>
  10. class ResizableShape : public BaseShape {
  11. protected:
  12. bool resizing;
  13. public:
  14. ResizableShape(qreal x, qreal y, qreal w, qreal h);
  15. // 事件处理
  16. void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
  17. void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
  18. void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
  19. void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
  20. void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
  21. protected:
  22. bool isInResizeArea(const QPointF &pos) const;
  23. };
  24. // 可调整大小的矩形
  25. class ResizableRectangle : public ResizableShape<QGraphicsRectItem> {
  26. public:
  27. ResizableRectangle(qreal x, qreal y, qreal w, qreal h);
  28. QColor pressedColor() const { return m_pressedColor; }
  29. void setPressedColor(const QColor& color) { m_pressedColor = color; }
  30. QColor releasedColor() const { return m_releasedColor; }
  31. void setReleasedColor(const QColor& color) { m_releasedColor = color; }
  32. QString name() const { return m_name; }
  33. void setName(const QString& name) { m_name = name; }
  34. private:
  35. QColor m_pressedColor = Qt::green; // 按钮按下时的颜色
  36. QColor m_releasedColor = Qt::yellow; // 按钮松开时的颜色
  37. QString m_name = "按钮"; // 默认名称
  38. };
  39. class NamedItem {
  40. public:
  41. virtual QString name() const = 0;
  42. virtual void setName(const QString& name) = 0;
  43. virtual ~NamedItem() = default;
  44. };
  45. // 可调整大小的椭圆
  46. class ResizableEllipse : public ResizableShape<QGraphicsEllipseItem> {
  47. public:
  48. ResizableEllipse(qreal x, qreal y, qreal w, qreal h);
  49. QColor onColor() const { return m_onColor; }
  50. void setOnColor(const QColor& color) { m_onColor = color; }
  51. QColor offColor() const { return m_offColor; }
  52. void setOffColor(const QColor& color) { m_offColor = color; }
  53. QString name() const { return m_name; }
  54. void setName(const QString& name) { m_name = name; }
  55. private:
  56. QColor m_onColor = Qt::green; // 默认开状态颜色
  57. QColor m_offColor = Qt::red; // 默认关状态颜色
  58. QString m_name = "指示灯"; // 默认名称
  59. };
  60. #endif // HMIWIDGET_H