#ifndef PLCITEMS_H #define PLCITEMS_H #include #include #include #include #include #include #include // PLC图形项基类 class PLCItem : public QGraphicsObject { Q_OBJECT public: enum ItemType { NormallyOpen, NormallyClosed, GreaterThan, GreaterEqual, LessThan, LessEqual, Equal, Coil }; PLCItem(ItemType type, QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; ItemType itemType() const { return m_type; } QString name() const { return m_name; } void setName(const QString &name) { m_name = name; } void setState(bool active); bool isActive() const { return m_active; } QPointF leftTerminal() const; QPointF rightTerminal() const; protected: void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; signals: void stateChanged(bool active); private: ItemType m_type; QString m_name; bool m_active = false; QRectF m_boundingRect; QGraphicsRectItem* m_tableFrame = nullptr; QVector m_horizontalLines; QVector m_verticalLines; int m_rows = 15; // 表格行数 int m_columns = 20; // 表格列数 int m_cellSize = 50; // 单元格大小(像素) }; // 常开触点 class NormallyOpenItem : public PLCItem { public: NormallyOpenItem(QGraphicsItem *parent = nullptr) : PLCItem(NormallyOpen, parent) {} }; // 常闭触点 class NormallyClosedItem : public PLCItem { public: NormallyClosedItem(QGraphicsItem *parent = nullptr) : PLCItem(NormallyClosed, parent) {} }; // 大于指令 class GreaterThanItem : public PLCItem { public: GreaterThanItem(QGraphicsItem *parent = nullptr) : PLCItem(GreaterThan, parent) {} }; // 大于等于指令 class GreaterEqualItem : public PLCItem { public: GreaterEqualItem(QGraphicsItem *parent = nullptr) : PLCItem(GreaterEqual, parent) {} }; // 小于指令 class LessThanItem : public PLCItem { public: LessThanItem(QGraphicsItem *parent = nullptr) : PLCItem(LessThan, parent) {} }; // 小于等于指令 class LessEqualItem : public PLCItem { public: LessEqualItem(QGraphicsItem *parent = nullptr) : PLCItem(LessEqual, parent) {} }; // 等于指令 class EqualItem : public PLCItem { public: EqualItem(QGraphicsItem *parent = nullptr) : PLCItem(Equal, parent) {} }; // 线圈 class CoilItem : public PLCItem { public: CoilItem(QGraphicsItem *parent = nullptr) : PLCItem(Coil, parent) {} }; #endif // PLCITEMS_H