#ifndef ITEM_H #define ITEM_H #include #include #include #include class Connection; class Item : public QGraphicsObject { Q_OBJECT public: enum AnchorType { Left, Right }; explicit Item(const QString &type, QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; QPointF anchorPos(AnchorType type) const; void addConnection(Connection* conn); void removeConnection(Connection* conn); QList connections(); QString itemType(); virtual bool setRegisterId(const QString& id); QString registerId() const { return registerId_; } virtual void setRegisterValue(const QString& registerId, quint16 value); quint16 registerValue() const { return registerValue_; } virtual QStringList resetRegister(); virtual void setCompare(QString) {} // 添加状态属性(用于线圈、触点等) virtual bool state() const { return false; } signals: void requestCopy(Item*); void requestDelete(Item*); void requestBindRegister(Item*); void requestCompare(Item*); void requestReset(Item*); protected: void MenuActions(QMenu *menu); virtual void addMenuActions(QMenu *menu); virtual void handleMenuAction(QAction *action); QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; QString type_; QList connections_; QString registerId_; quint16 registerValue_ = 0; }; #endif // ITEM_H