Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

115 lignes
3.0 KiB

  1. #pragma once
  2. // Qt 核心模块
  3. #include <QWidget>
  4. #include <QListWidget>
  5. #include <QGraphicsView>
  6. #include <QGraphicsScene>
  7. #include <QLabel>
  8. #include <QPushButton>
  9. #include <QTextEdit>
  10. #include <QList>
  11. /**
  12. * @class EditorWidget
  13. * @brief 图形编辑器基础抽象类
  14. *
  15. * 提供编辑器基础框架,包含工具栏、绘图区和输出控制台。
  16. * 作为抽象基类,需要派生类实现特定的编辑功能。
  17. */
  18. class EditorWidget : public QWidget {
  19. Q_OBJECT // 启用Qt元对象系统(信号槽、属性等)
  20. public:
  21. explicit EditorWidget(QWidget* parent = nullptr);
  22. /**
  23. * @brief 虚析构函数
  24. */
  25. virtual ~EditorWidget();
  26. // ========== 纯虚接口 ==========
  27. /**
  28. * @brief 获取当前场景
  29. * @return 当前活动的QGraphicsScene指针
  30. */
  31. virtual QGraphicsScene* getCurrentScene() const = 0;
  32. /**
  33. * @brief 获取所有页面场景
  34. * @return 场景列表(HMI多页面返回多个,PLC单页面返回单个场景的列表)
  35. */
  36. virtual QList<QGraphicsScene*> getPages() const = 0;
  37. /**
  38. * @brief 获取当前页面索引
  39. * @return 当前页索引(HMI使用,PLC等单页面编辑器可固定返回0)
  40. */
  41. virtual int getCurrentPageIndex() const = 0;
  42. /**
  43. * @brief 清空所有页面/场景内容
  44. */
  45. virtual void clearPages() = 0;
  46. protected:
  47. // ========== 需要派生类实现的接口 ==========
  48. /**
  49. * @brief 初始化工具栏内容
  50. */
  51. virtual void initToolbar() = 0;
  52. /**
  53. * @brief 工具栏项点击处理
  54. * @param item 被点击的QListWidgetItem对象
  55. */
  56. virtual void onToolbarItemClicked(QListWidgetItem* item) = 0;
  57. // ========== 公共工具方法 ==========
  58. /**
  59. * @brief 向输出控制台追加消息
  60. * @param message 要显示的消息内容
  61. */
  62. void appendOutput(const QString& message);
  63. /**
  64. * @brief 确保视图准备就绪
  65. * 首次显示时执行必要的初始化操作
  66. */
  67. void ensureViewReady();
  68. // ========== 事件重写 ==========
  69. /**
  70. * @brief 键盘按下事件处理
  71. * @param event 键盘事件对象
  72. */
  73. virtual void keyPressEvent(QKeyEvent* event) override;
  74. /**
  75. * @brief 事件过滤器
  76. * @param obj 事件目标对象
  77. * @param event 事件对象
  78. * @return 是否已处理该事件
  79. */
  80. virtual bool eventFilter(QObject* obj, QEvent* event) override;
  81. /**
  82. * @brief 窗口大小调整事件
  83. * @param event 大小调整事件对象
  84. */
  85. virtual void resizeEvent(QResizeEvent* event) override;
  86. /**
  87. * @brief 窗口显示事件
  88. * @param event 显示事件对象
  89. */
  90. virtual void showEvent(QShowEvent* event) override;
  91. protected:
  92. // ========== 成员变量 ==========
  93. QListWidget* toolbar; ///< 左侧工具栏(图标模式)
  94. QGraphicsView* editArea; ///< 中央绘图视图区域
  95. QTextEdit* outputTextEdit; ///< 底部输出信息控制台
  96. bool firstShow = true; ///< 首次显示标志(用于延迟初始化)
  97. };