You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 rivejä
1.5 KiB

  1. #ifndef ITEM_H
  2. #define ITEM_H
  3. #include <QGraphicsObject>
  4. #include <QColor>
  5. #include <QList>
  6. #include <QAction>
  7. class Connection;
  8. class Item : public QGraphicsObject
  9. {
  10. Q_OBJECT
  11. public:
  12. enum AnchorType { Left, Right };
  13. explicit Item(const QString &type, QGraphicsItem *parent = nullptr);
  14. QRectF boundingRect() const override;
  15. QPointF anchorPos(AnchorType type) const;
  16. void addConnection(Connection* conn);
  17. void removeConnection(Connection* conn);
  18. QList<Connection*> connections();
  19. QString itemType();
  20. virtual void setRegisterId(const QString& id);
  21. QString registerId() const { return registerId_; }
  22. virtual void setRegisterValue(const QString& registerId, quint16 value);
  23. quint16 registerValue() const { return registerValue_; }
  24. virtual void setCompare(QString) {}
  25. // 添加状态属性(用于线圈、触点等)
  26. virtual bool state() const { return false; }
  27. signals:
  28. void requestCopy(Item*);
  29. void requestDelete(Item*);
  30. void requestBindRegister(Item*);
  31. void requestCompare(Item*);
  32. protected:
  33. void MenuActions(QMenu *menu);
  34. virtual void addMenuActions(QMenu *menu);
  35. virtual void handleMenuAction(QAction *action);
  36. QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
  37. void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
  38. QString type_;
  39. QList<Connection*> connections_;
  40. QString registerId_;
  41. quint16 registerValue_ = 0;
  42. };
  43. #endif // ITEM_H