#ifndef NMWXMEASUREDLG_H #define NMWXMEASUREDLG_H #include "iDlgBase.h" #include "nmSubWxs_global.h" #include class QLineEdit; class QPushButton; class nmDataAnalyzeManager; class nmDataMeasure; /** * @brief 测量工具浮动对话框,显示测量长度,并支持将端点拟合到最近的井。 * @note 长度使用可复制的只读输入框,显示单位与换算由框架单位绑定器管理。 * 切换单位只改变显示,测量数据始终保留米制长度;关闭窗口时通知绘图区结束测量。 * 初始尺寸随字体和主题计算,控件采用推荐高度,窗口纵向拉伸时内容保持紧凑。 * 输入列与单位列沿用储层参数常规字段的 8:5 横向伸展比例。 */ class NM_SUB_WXS_EXPORT nmWxMeasureDlg : public iDlgBase { Q_OBJECT public: /** @brief 绑定父级 nmGuiPlot 所属的分析数据;parent 负责管理对话框生命周期。 */ explicit nmWxMeasureDlg(QWidget* parent = nullptr); signals: /** @brief 对话框结束时通知所属绘图区移除测量工具和线段。 */ void needDeleteMeasureObj(); public slots: /** @brief 将测量起点拟合到最近的井,并重新计算米制长度。 */ void onFitStartClicked(); /** @brief 将测量终点拟合到最近的井,并重新计算米制长度。 */ void onFitEndClicked(); /** @brief 从测量模型刷新只读长度,保留用户当前选择的显示单位。 */ void updateDisplay(); /** @brief 响应底部关闭按钮,结束对话框。 */ void onCloseClicked(); /** @brief 开始新一次测量时,恢复两个端点的拟合操作。 */ void resetButtons(); protected: /** @brief 响应标题栏关闭,通知绘图区清理后交给基类处理关闭事件。 */ void closeEvent(QCloseEvent* event) override; private: /** @brief 创建统一的长度字段、端点操作区和底部按钮区。 */ void initUI() override; /** @brief 共用的端点拟合逻辑;bFitStart 为 true 时处理起点,否则处理终点。 */ void fitToNearestWell(bool bFitStart); private: // 借用父级 Map 的分析管理器及测量数据,不负责释放;对象删除后自动置空。 // 拟合始终从同一分析读取井,避免切换分析后将其他分析的井坐标写入本次测量。 QPointer m_pDataManager; QPointer m_pData; // 长度及拟合按钮均由 Qt 父子对象机制释放,不使用旧的业务单位控件。 QLineEdit* m_pLengthEdit; QPushButton* m_pFitStartButton; QPushButton* m_pFitEndButton; // 框架单位对是否绑定成功;失败时不显示未经换算的长度。 bool m_bUnitBound; }; #endif // NMWXMEASUREDLG_H