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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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