#pragma #include "WindowAppBlockBase.h" /////////////////////////////////////////////////////////////////// // Port类型的工具功能块图 (Function Block Diagram, TBD) // // 总体处理思路: // // 双击左键进入编辑状态,并选择当前的文字 // 此时可以利用左键选择文本以及编辑操作,右键保留剪切复制等操作 // 回车键离开焦点,离开焦点时,做编辑成功处理,发射信号给父对象以做其他处理 // 鼠标右键触发的离开焦点做取消操作处理,恢复之前编辑的文本 // 右键菜单也会触发离开焦点这里直接进入父类的离开焦点事件,需要注意 // 其他离开焦点的事件,也做编辑成功的处理,发射信号给父对象 // 2021-3-20 此类已经废弃,以后Port类型的Block也不能直接编辑了 class WindowAppBlockPortOld : public QGraphicsTextItem, public WindowAppBlockBase { Q_OBJECT // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work! Q_INTERFACES(QGraphicsItem) public: WindowAppBlockPortOld(const TOOL_EX* pTool, QGraphicsItem* parent = nullptr); public: // 添加接口 void addItemInterfaces(); // 设定本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; protected slots: // 显示右键菜单 void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override; // 用于处理双击编辑文字的相关事件 // 获得焦点时 void focusInEvent(QFocusEvent* event) override; // 焦点移出时 void focusOutEvent(QFocusEvent* event) override; // 键盘按下时 void keyPressEvent(QKeyEvent* event) override; // 鼠标单击 void mousePressEvent(QGraphicsSceneMouseEvent* event)override; // 鼠标双击 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override; // 菜单 - Edit void onMenuEdit(); signals: // 编辑完毕信号(TODO: 本信号暂未使用) void inputOverSignal(QString strText); // 用户选择变更信号 void selectedChange(QGraphicsItem* item); // 功能块位置改变 void blockMoveSignal(QGraphicsItem* item); private: // 根据用户的输入实时更新矩形区域的尺寸 void UpdateRect(); protected: // 当前用户录入的文字 QString m_strInput; // Port功能块特有的编辑数值功能项 QAction* editAction; };