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/nmWxEditWellPlot.h

133 lines
4.3 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 NMWXEDITWELLPLOT_H
#define NMWXEDITWELLPLOT_H
#include <QDialog>
#include "nmSubWxs_global.h"
#include <QList>
// 前向声明需要的Qt布局和控件类
class QHBoxLayout;
class QVBoxLayout;
class QSplitter;
class QGridLayout;
class QLineEdit;
class QComboBox;
class QKeyEvent;
class QCheckBox;
class QPushButton;
class QString;
// 自定义容器
class iWxWellNew;
class nmWxWellboreTrajectoryDisplay;
// 数据源
class ZxDataWell;
class nmDataAttribute;
class nmDataWellBase;
class nmDataVerticalWell;
class nmDataVerticalFracturedWell;
class nmDataHorizontalFracturedWell;
class nmDataPerforation;
// 自定义GUI组件类
class nmGUIComponentBase;
class nmGUIComponentLineEdit;
class nmGUIComponentComboBox;
// 编辑井控制器
class nmWellEditorController;
class NM_SUB_WXS_EXPORT nmWxEditWellPlot : public QDialog
{
Q_OBJECT
public:
explicit nmWxEditWellPlot(QWidget *parent = nullptr, ZxDataWell* pZxDataWell = nullptr, nmDataWellBase* pNmDataWell = nullptr);
~nmWxEditWellPlot();
// 初始化界面
void initUI();
// 初始化界面主布局
void initMainLayout();
// 创建左侧面板容器包含m_pWellNewWidget和m_pBottomLeftPanel
QWidget* createLeftPanel();
// 创建右侧面板容器,即井筒轨迹显示
QWidget* createRightPanel();
// 创建最底部面板容器
QWidget* createBottomPanel();
// 连接视图与控制器之间的信号槽
void setupControllerConnections();
// 新增一个辅助函数来动态更新底部左侧面板的UI
void updateBottomLeftPanelUI();
// 辅助函数,用于向网格布局中添加 nmGUIComponentBase 组件
// 注意:传入 nmDataAttribute 的引用,并且 const_cast 转换是安全的,因为组件需要修改其值
void addLineEditComponentToGrid(nmDataAttribute& attribute, int& row);
void addComboBoxComponentToGrid(nmDataAttribute& attribute, int& row);
// 根据井类型添加特定参数的私有辅助函数
void addVerticalWellParameters(nmDataVerticalWell* well, int& row);
void addVerticalFracturedWellParameters(nmDataVerticalFracturedWell* well, int& row);
void addHorizontalFracturedWellParameters(nmDataHorizontalFracturedWell* well, int& row);
// 返回修改后的井数据
nmDataWellBase* getModifiedDataWell();
//public slots:
// void onTimeDependentIconClicked();
// // 新添加的槽函数
// void onTimeDependentCheckToggled(bool checked);
protected:
void keyPressEvent(QKeyEvent *event) override;
private slots:
// 确认和取消按钮的槽函数
void onOkClicked();
void onCancelClicked();
// 连接模型数据变化的槽函数,用于刷新左侧参数列表
void onWellDataChanged();
// 切换井类型的槽函数
void onWellTypeChanged(int index);
// 井名称修改
void onWellNameEditingFinished();
void onTimeDependentIconClicked();
void onTimeDependentCheckToggled(bool checked);
private:
QSplitter* m_pMainSplitter; // 主分割器
QVBoxLayout* m_pTopVLayout; // 顶层垂直布局
QVBoxLayout* m_pLeftVLayout; // 左侧垂直布局
QGridLayout* m_pBottomLeftGridLayout; // 参数面板的网格布局
QLineEdit* m_pWellNameLineEdit; // 井名编辑框
QComboBox* m_pWellTypeComboBox; // 井类型选择下拉框
iWxWellNew* m_pWellNewWidget; // 嵌入的 iWxWellNew 实例
QWidget* m_pBottomLeftPanel; // 底部左侧自定义参数面板
nmWxWellboreTrajectoryDisplay* m_pRightPanel; // 右侧井筒轨迹视图面板
QWidget* m_pOverallBottomPanel; // 整个界面最底部的容器
ZxDataWell* m_pZxDataWell; // 存储传入的井数据
nmDataWellBase* m_pNmDataWell; // 数值井数据
QList<nmGUIComponentBase*> m_listParameterComponents; // 参数面板下自定义的参数组件
nmWellEditorController* m_pWellEditorController; // 编辑井控制器
// 时间相关控件
QCheckBox* m_pTimeDependentCheck;
QPushButton* m_pTimeDependentIconButton;
QString m_sIconDir; // 图标目录路径,如果还没有定义的话
bool m_bOriginalTimeDependentSkin;
};
#endif // NMWXEDITWELLPLOT_H