#pragma once // Qt 核心模块 #include #include #include #include #include #include #include #include /** * @class EditorWidget * @brief 图形编辑器基础抽象类 * * 提供编辑器基础框架,包含工具栏、绘图区和输出控制台。 * 作为抽象基类,需要派生类实现特定的编辑功能。 */ class EditorWidget : public QWidget { Q_OBJECT // 启用Qt元对象系统(信号槽、属性等) public: explicit EditorWidget(QWidget* parent = nullptr); /** * @brief 虚析构函数 */ virtual ~EditorWidget(); // ========== 纯虚接口 ========== /** * @brief 获取当前场景 * @return 当前活动的QGraphicsScene指针 */ virtual QGraphicsScene* getCurrentScene() const = 0; /** * @brief 获取所有页面场景 * @return 场景列表(HMI多页面返回多个,PLC单页面返回单个场景的列表) */ virtual QList getPages() const = 0; /** * @brief 获取当前页面索引 * @return 当前页索引(HMI使用,PLC等单页面编辑器可固定返回0) */ virtual int getCurrentPageIndex() const = 0; /** * @brief 清空所有页面/场景内容 */ virtual void clearPages() = 0; protected: // ========== 需要派生类实现的接口 ========== /** * @brief 初始化工具栏内容 */ virtual void initToolbar() = 0; /** * @brief 工具栏项点击处理 * @param item 被点击的QListWidgetItem对象 */ virtual void onToolbarItemClicked(QListWidgetItem* item) = 0; // ========== 公共工具方法 ========== /** * @brief 向输出控制台追加消息 * @param message 要显示的消息内容 */ void appendOutput(const QString& message); /** * @brief 确保视图准备就绪 * 首次显示时执行必要的初始化操作 */ void ensureViewReady(); // ========== 事件重写 ========== /** * @brief 键盘按下事件处理 * @param event 键盘事件对象 */ virtual void keyPressEvent(QKeyEvent* event) override; /** * @brief 事件过滤器 * @param obj 事件目标对象 * @param event 事件对象 * @return 是否已处理该事件 */ virtual bool eventFilter(QObject* obj, QEvent* event) override; /** * @brief 窗口大小调整事件 * @param event 大小调整事件对象 */ virtual void resizeEvent(QResizeEvent* event) override; /** * @brief 窗口显示事件 * @param event 显示事件对象 */ virtual void showEvent(QShowEvent* event) override; protected: // ========== 成员变量 ========== QListWidget* toolbar; ///< 左侧工具栏(图标模式) QGraphicsView* editArea; ///< 中央绘图视图区域 QTextEdit* outputTextEdit; ///< 底部输出信息控制台 bool firstShow = true; ///< 首次显示标志(用于延迟初始化) };