WindowAppBlockPortOld.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma
  2. #include "WindowAppBlockBase.h"
  3. ///////////////////////////////////////////////////////////////////
  4. // Port类型的工具功能块图 (Function Block Diagram, TBD)
  5. //
  6. // 总体处理思路:
  7. //
  8. // 双击左键进入编辑状态,并选择当前的文字
  9. // 此时可以利用左键选择文本以及编辑操作,右键保留剪切复制等操作
  10. // 回车键离开焦点,离开焦点时,做编辑成功处理,发射信号给父对象以做其他处理
  11. // 鼠标右键触发的离开焦点做取消操作处理,恢复之前编辑的文本
  12. // 右键菜单也会触发离开焦点这里直接进入父类的离开焦点事件,需要注意
  13. // 其他离开焦点的事件,也做编辑成功的处理,发射信号给父对象
  14. // 2021-3-20 此类已经废弃,以后Port类型的Block也不能直接编辑了
  15. class WindowAppBlockPortOld : public QGraphicsTextItem, public WindowAppBlockBase
  16. {
  17. Q_OBJECT
  18. // 添加这一行,否则会出现警告:Warning: qobject_cast to QGraphicsItem will not work!
  19. Q_INTERFACES(QGraphicsItem)
  20. public:
  21. WindowAppBlockPortOld(const TOOL_EX* pTool, QGraphicsItem* parent = nullptr);
  22. public:
  23. // 添加接口
  24. void addItemInterfaces();
  25. // 设定本Item的自定义类型
  26. enum { Type = ITEM_TYPE_PORT };
  27. int type() const
  28. {
  29. // 针对该 item 启用 qgraphicsitem_cast
  30. return Type;
  31. }
  32. protected:
  33. void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override;
  34. QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
  35. QRectF boundingRect() const override;
  36. protected slots:
  37. // 显示右键菜单
  38. void contextMenuEvent(QGraphicsSceneContextMenuEvent* event) override;
  39. // 用于处理双击编辑文字的相关事件
  40. // 获得焦点时
  41. void focusInEvent(QFocusEvent* event) override;
  42. // 焦点移出时
  43. void focusOutEvent(QFocusEvent* event) override;
  44. // 键盘按下时
  45. void keyPressEvent(QKeyEvent* event) override;
  46. // 鼠标单击
  47. void mousePressEvent(QGraphicsSceneMouseEvent* event)override;
  48. // 鼠标双击
  49. void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) override;
  50. // 菜单 - Edit
  51. void onMenuEdit();
  52. signals:
  53. // 编辑完毕信号(TODO: 本信号暂未使用)
  54. void inputOverSignal(QString strText);
  55. // 用户选择变更信号
  56. void selectedChange(QGraphicsItem* item);
  57. // 功能块位置改变
  58. void blockMoveSignal(QGraphicsItem* item);
  59. private:
  60. // 根据用户的输入实时更新矩形区域的尺寸
  61. void UpdateRect();
  62. protected:
  63. // 当前用户录入的文字
  64. QString m_strInput;
  65. // Port功能块特有的编辑数值功能项
  66. QAction* editAction;
  67. };