You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmSubWxs/nmWxDisplaySettings.h

148 lines
4.6 KiB
C

#ifndef NMWXDISPLAYSETTINGS_H
#define NMWXDISPLAYSETTINGS_H
#include "nmSubWxs_global.h" // 确保包含您的全局导出宏
#include "iDlgBase.h"
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QCheckBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QPainter>
#include <QEvent> // 用于事件重写
#include <QList> // 用于QList<ConnectionLine>
#include <QPoint> // 用于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<ConnectionLine> 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