#ifndef NMWXMEASURINGSCALEDLG_H #define NMWXMEASURINGSCALEDLG_H #include "iDlgBase.h" #include "nmSubWxs_global.h" #include #include #include class QLineEdit; /** * @brief 比例尺设置对话框,用实际长度标定绘图区中选定的线段。 * @note 起始点、终点使用可复制的只读输入框;实际长度的显示单位和换算由框架单位绑定器管理。 * 确认后仅向调用方返回米制长度,由所属绘图窗口在标定成功后保存分析数据。 * 取消或关闭窗口不提交编辑内容。 * 字段初始尺寸由字体和主题决定,坐标内容影响推荐宽度;控件采用推荐高度,纵向保持紧凑。 * 输入列与单位列沿用储层参数常规字段的 8:5 横向伸展比例。 */ class NM_SUB_WXS_EXPORT nmWxMeasuringScaleDlg : public iDlgBase { Q_OBJECT public: /** * @brief 根据绘图区选定的两个点及初始实际长度创建对话框。 * @param startPoint 绘图区线段起点,保留调用方传入的坐标值。 * @param endPoint 绘图区线段终点,保留调用方传入的坐标值。 * @param pLength 输入/输出的实际长度,单位为米;初始为零时需要用户填写。 * @note pLength 由调用方持有,必须非空且在对话框存续期间有效。 * 对话框不释放该指针,仅在确认成功时更新其指向的数值。 */ nmWxMeasuringScaleDlg(QPointF startPoint, QPointF endPoint, double* pLength); /** @brief 按布局、当前字体及坐标文字给出推荐尺寸,不设置固定尺寸或内容最小宽度。 */ QSize sizeHint() const override; protected: /** * @brief 校验当前单位下的长度,返回米制长度并以 Accepted 状态关闭窗口。 * @note 长度无效时保留编辑状态和输入焦点,不弹出校验提示。 */ void accept() override; private: /** @brief 创建只读坐标和实际长度输入区,并绑定单位及确定/取消按钮。 */ void initUI() override; private: // 绘图区线段端点;仅供查看,不随长度单位切换而换算。 QPointF m_startPoint; QPointF m_endPoint; // 端点坐标文本,供只读输入框展示。 QString m_sStartPoint; QString m_sEndPoint; // 借用调用方的米制长度地址,确认前不回写,不拥有该指针。 double* m_pLength; // 实际长度输入框;由 Qt 父子对象机制释放,数值含义由绑定器及当前单位决定。 QLineEdit* m_pLengthEdit; // 长度单位是否绑定成功;失败时禁用编辑和确认,避免提交未换算的数值。 bool m_bUnitBound; }; #endif // NMWXMEASURINGSCALEDLG_H