|
- #ifndef PLCITEMS_H
- #define PLCITEMS_H
-
- #include <QGraphicsObject>
- #include <QPen>
- #include <QBrush>
- #include <QFont>
- #include <QPainter>
- #include <QPointF>
- #include <QDebug>
-
- // 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<QGraphicsLineItem*> m_horizontalLines;
- QVector<QGraphicsLineItem*> 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
|