#pragma once #include "WindowAppBlockBase.h" /// /// Port类型的工具功能块图 (Port Block Diagram, PBD) /// class WindowAppBlockPort : public WindowAppBlockBase { Q_OBJECT // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work! Q_INTERFACES(QGraphicsItem) public: WindowAppBlockPort(TOOL* newPort, POU* Pou, bool bShowOnly = false, QGraphicsObject* parent = nullptr); // 添加接口 void addItemInterfaces(); // 绑定一个接口 void bindInterface(_INTERFACE* pNewInf); // 设定本Item的自定义类型 enum { Type = ITEM_TYPE_PORT }; int type() const { // 针对该 item 启用 qgraphicsitem_cast return Type; } protected: void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override; // QVariant itemChange(GraphicsItemChange change, const QVariant& value) override; // QRectF boundingRect() const override; // 绘制功能块 void DrawBlock(QPainter* painter); protected slots: //// 显示右键菜单 //void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override; // 鼠标单击 // void mousePressEvent(QGraphicsSceneMouseEvent* event)override; // 鼠标双击 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override; protected: // 根据用户的输入实时更新矩形区域的尺寸 virtual void updateRect(); // 各个菜单的响应函数 // 初始化功能块的右键菜单 void createContextMenu(); // 菜单 - Delete void onMenuDelete(); // 2022-3-22 为Port中显示的接口名称做调整(局部变量不加Pou前缀,全局变量加Pou前缀) QString genPortInfName(const _INTERFACE* pNewInf); protected: // 本port上绑定的接口显示的文字 QString m_strInfTitle; };