#ifndef NMWXDISPLAYSETTINGS_H #define NMWXDISPLAYSETTINGS_H #include "nmSubWxs_global.h" // 确保包含您的全局导出宏 #include "iDlgBase.h" #include #include #include #include #include #include #include #include // 用于事件重写 #include // 用于QList #include // 用于QPoint #include "nmDataAnalyzeManager.h" // --- 前向声明 --- // 声明CustomDisPlayTreeWidget类,因为CustomDisPlayTreeWidgetItem会引用它 class CustomDisPlayTreeWidget; /** * @brief CustomDisPlayTreeWidgetItem类 * 继承自QTreeWidgetItem,用于在树形项中嵌入QCheckBox。 */ class CustomDisPlayTreeWidgetItem : public QTreeWidgetItem { public: // 构造函数:用于顶级项 explicit CustomDisPlayTreeWidgetItem(QTreeWidget *pParent = nullptr); // 构造函数:用于子项 explicit CustomDisPlayTreeWidgetItem(QTreeWidgetItem *pParent = nullptr); /** * @brief 获取与当前树形项关联的复选框 * @return 指向QCheckBox的指针 */ QCheckBox* checkBox() const { return m_pCheckBox; } private: QCheckBox *m_pCheckBox; // 指向复选框的指针 }; /** * @brief CustomDisPlayTreeWidget类 * 继承自QTreeWidget,用于自定义树形控件的绘制行为,特别是分支线和特殊连接线。 */ class CustomDisPlayTreeWidget : public QTreeWidget { Q_OBJECT public: explicit CustomDisPlayTreeWidget(QWidget *pParent = nullptr); protected: /** * @brief 重写drawBranches函数,自定义绘制树形分支线(水平线和垂直连接线)。 * @param painter 绘图器 * @param rect 当前项的矩形区域 * @param index 当前项的模型索引 */ void drawBranches(QPainter *pPainter, const QRect &rect, const QModelIndex &index) const override; /** * @brief 重写paintEvent函数,用于绘制整个树形控件,包括缓存的特殊连接线。 * @param event 绘制事件 */ void paintEvent(QPaintEvent *pEvent) override; public slots: /** * @brief 更新特殊连接线(如最后一个根节点到第一个根节点)的位置。 * 当树的布局或内容发生变化时调用。 */ void updateConnectionLines(); private: // 连接线结构体,用于存储特殊连接线的起点和终点 struct ConnectionLine { QPoint start; QPoint end; }; QList m_connectionLines; // 缓存特殊连接线的列表 }; /** * @brief nmWxDisplaySettings类 * 显示设置对话框,包含一个自定义的树形控件和控制按钮。 */ class NM_SUB_WXS_EXPORT nmWxDisplaySettings : public iDlgBase { Q_OBJECT public: explicit nmWxDisplaySettings(QWidget *pParent = nullptr); ~nmWxDisplaySettings(); // 析构函数,用于清理资源(尽管Qt父子机制通常足够) private slots: /** * @brief 处理复选框状态变化的槽函数。 * 当任何一个复选框状态改变时触发,并根据其状态更新子项的启用状态。 * @param state 复选框的新状态 */ void onCheckBoxStateChanged(int state); /** * @brief 处理Image Manager按钮点击的槽函数。 */ void onImageManagerClicked(); /** * @brief 处理Apply按钮点击的槽函数。 */ void onApplyClicked(); /** * @brief 处理OK按钮点击的槽函数。 */ void onOkClicked(); /** * @brief 处理Cancel按钮点击的槽函数。 */ void onCancelClicked(); private: /** * @brief 递归更新给定树形项的所有子项的启用状态。 * @param pItem 当前要更新其子项的树形项 * @param bEnabled 子项是否应该被启用 (true) 或禁用 (false) */ void updateChildItemsEnableState(QTreeWidgetItem *pItem, bool bEnabled); // UI 成员变量 CustomDisPlayTreeWidget *m_pTreeWidget; // 自定义树形控件 QPushButton *m_pImageManagerButton; // Image Manager 按钮 QPushButton *m_pApplyButton; // Apply 按钮 QPushButton *m_pOkButton; // OK 按钮 QPushButton *m_pCancelButton; // Cancel 按钮 QVBoxLayout *m_pMainLayout; // 主布局 }; #endif // NMWXDISPLAYSETTINGS_H