|
|
|
|
|
#ifndef NMWXDISPLAYSETTINGS_H
|
|
|
|
|
|
#define NMWXDISPLAYSETTINGS_H
|
|
|
|
|
|
|
|
|
|
|
|
#include "nmSubWxs_global.h" // 确保包含您的全局导出宏
|
|
|
|
|
|
#include <QDialog>
|
|
|
|
|
|
#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 QDialog
|
|
|
|
|
|
{
|
|
|
|
|
|
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
|