From 9e284ab25c7c2f3610af3cdf6c93c5c3814d5efd Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Mon, 15 Jun 2026 17:04:45 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E=20nmGridRowUtil?= =?UTF-8?q?s=EF=BC=9A=E7=BB=A7=E6=89=BF=20iGridRowUtils=20=E7=9A=84?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=B1=82=E5=AD=90=E7=B1=BB=EF=BC=8C=E9=9A=94?= =?UTF-8?q?=E7=A6=BB=E5=9F=BA=E7=B1=BB=E6=8E=A5=E5=8F=A3=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/nmNum/nmGUI/nmGridRowUtils.h | 154 +++++++++++++++++++++++++++ Src/nmNum/nmGUI/nmGridRowUtils.cpp | 152 ++++++++++++++++++++++++++ Src4/nmNum/nmGUI/nmGUI.pro | 32 +++++- 3 files changed, 336 insertions(+), 2 deletions(-) create mode 100644 Include/nmNum/nmGUI/nmGridRowUtils.h create mode 100644 Src/nmNum/nmGUI/nmGridRowUtils.cpp diff --git a/Include/nmNum/nmGUI/nmGridRowUtils.h b/Include/nmNum/nmGUI/nmGridRowUtils.h new file mode 100644 index 0000000..3cb455c --- /dev/null +++ b/Include/nmNum/nmGUI/nmGridRowUtils.h @@ -0,0 +1,154 @@ +#pragma once + +#include "nmGUI_global.h" +#include "iGridRowUtils.h" + +/// @brief NM模块专用的参数区渲染工具类,继承自 iGridRowUtils +/// @note 设立此子类的主要目的是作为 NM 模块与基类之间的适配层: +/// - 隔离基类接口变更对 NM 模块的影响,基类改动只需修改本文件 +/// - NM 模块后续如需定制参数区行为(如特殊的参数联动、自定义渲染等), +/// 只需在此类中 override 相应虚函数,无需触碰基类代码 +/// - 当前实现以直接转发基类接口为主,按需逐步扩展 +class NM_GUI_EXPORT nmGridRowUtils : public iGridRowUtils +{ + Q_OBJECT + +public: + + /// @brief 构造函数,接口与基类保持一致 + /// @param bSimple 是否为简单模式(不涉及序列化),默认 false + /// @param parent 父窗口 + explicit nmGridRowUtils(bool bSimple = false, QWidget* parent = nullptr); + ~nmGridRowUtils(); + + // ================================================================ + // 初始化与构建 + // ================================================================ + + /// @brief 初始化界面,基类实现负责创建基础布局 + virtual void initUI() override; + + /// @brief 根据参数列表构建参数区 + /// @param listParas 参数英文名列表 + /// @param bDnMode 是否为设计模式 + /// @param pWxDlg 参数对话框载体 + virtual bool buildRowUtils(QStringList listParas, + bool bDnMode, + QWidget* pWxDlg) override; + + // ================================================================ + // 参数读写 + // ================================================================ + + /// @brief 设置指定参数的值 + /// @param sPara 参数名称(英文标识) + /// @param o 参数值 + virtual bool setParaValue(QString sPara, QVariant o) override; + + /// @brief 获取指定参数的值 + /// @param sPara 参数名称(英文标识) + /// @param o 输出的参数值 + virtual bool getParaValue(QString sPara, QVariant& o) override; + + /// @brief 批量获取所有参数值 + /// @param map 输出结果,Key为英文ID + /// @param bOnlyFitted 是否仅获取参与拟合的参数 + /// @param bClearMap 是否先清空map + virtual bool getAllParaValues(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true) override; + + /// @brief 批量获取所有参数单位 + /// @param map 输出结果,Key为英文ID + /// @param bOnlyFitted 是否仅获取参与拟合的参数 + /// @param bClearMap 是否先清空map + virtual bool getAllParaUnits(QMap& map, + bool bOnlyFitted = false, + bool bClearMap = true) override; + + // ================================================================ + // 参数项查找 + // ================================================================ + + /// @brief 根据参数名获取对应的行项目 + /// @param sPara 参数名称 + virtual iGridRowItem* getItemByPara(QString sPara) override; + + /// @brief 根据参数名获取对应的值 + /// @param sPara 参数名称 + virtual QVariant getItemValueByPara(QString sPara) override; + + // ================================================================ + // 参数来源标识 + // ================================================================ + + /// @brief 设置参数来源标识(对应XML加载时的sKey) + /// @param s 来源标识,如 "WDT" 等 + void setParaSrcTag(QString s); + + // ================================================================ + // 序列化 + // ================================================================ + + /// @brief 序列化(保存) + virtual void onSerialize(ZxSerializer* ser) override; + + /// @brief 反序列化(加载) + virtual void onDeserialize(ZxSerializer* ser) override; + + // ================================================================ + // 结果组织 + // ================================================================ + + /// @brief 组织结果数据,用于将参数区的值整理为结果信息 + /// @param vec 输出结果列表(不清空,由调用方负责) + /// @param sType 结果类型 + /// @param bMultiPhase 是否多相 + virtual bool organizeResults(QVector& vec, + QString sType, + bool bMultiPhase) override; + +protected: + + // ================================================================ + // 内部构建 + // ================================================================ + + /// @brief 内部构建实现,递归创建参数项 + /// @param listParas 参数列表 + /// @param pItemParent 父级行项目 + /// @param bDnMode 是否为设计模式 + /// @param bProperOrder 是否保持正确顺序 + virtual bool _buildRowUtils(QStringList listParas, + iGridRowItem* pItemParent, + bool bDnMode, + bool bProperOrder = true) override; + + /// @brief 创建并添加一个参数项 + /// @param pParent 父级行项目 + /// @param p 参数对象 + /// @param sPara 参数名称 + virtual bool createAndAddItem(iGridRowItem* pParent, + iParameter* p, + QString sPara) override; + + /// @brief 连接参数项的信号槽 + /// @param p 需要连接的参数项 + virtual void connectSignalsOf(iGridRowItem* p) override; + + /// @brief 参数项创建完成后的绑定处理(如产液段与有效长度的关联) + virtual void bindItems() override; + +public slots: + + /// @brief 参数值改变前的预览回调 + /// @param o1 主要数据(m_oRawValue) + /// @param o2 辅助数据(如下拉填充内容) + virtual void slotValuePrevChanged(QVariant& o1, QVariant& o2) override; + + /// @brief 获取指定参数的当前值(供子项内部查询用) + /// @param sPara 参数名称 + /// @param o 输出值 + /// @param bOk 是否成功获取 + virtual void slotGetValueOf(QString sPara, QVariant& o, bool& bOk) override; +}; diff --git a/Src/nmNum/nmGUI/nmGridRowUtils.cpp b/Src/nmNum/nmGUI/nmGridRowUtils.cpp new file mode 100644 index 0000000..6bc9291 --- /dev/null +++ b/Src/nmNum/nmGUI/nmGridRowUtils.cpp @@ -0,0 +1,152 @@ +#include "nmGridRowUtils.h" + +// ================================================================ +// 构造与析构 +// ================================================================ + +nmGridRowUtils::nmGridRowUtils(bool bSimple, QWidget* parent) + : iGridRowUtils(bSimple, parent) +{ +} + +nmGridRowUtils::~nmGridRowUtils() +{ +} + +// ================================================================ +// 初始化与构建 +// ================================================================ + +void nmGridRowUtils::initUI() +{ + // 当前直接转发至基类,后续可在此添加NM模块特有的初始化逻辑 + iGridRowUtils::initUI(); +} + +bool nmGridRowUtils::buildRowUtils(QStringList listParas, + bool bDnMode, + QWidget* pWxDlg) +{ + // 当前直接转发至基类,后续可在此拦截参数列表或做前置/后置处理 + return iGridRowUtils::buildRowUtils(listParas, bDnMode, pWxDlg); +} + +// ================================================================ +// 参数读写 +// ================================================================ + +bool nmGridRowUtils::setParaValue(QString sPara, QVariant o) +{ + return iGridRowUtils::setParaValue(sPara, o); +} + +bool nmGridRowUtils::getParaValue(QString sPara, QVariant& o) +{ + return iGridRowUtils::getParaValue(sPara, o); +} + +bool nmGridRowUtils::getAllParaValues(QMap& map, + bool bOnlyFitted, + bool bClearMap) +{ + return iGridRowUtils::getAllParaValues(map, bOnlyFitted, bClearMap); +} + +bool nmGridRowUtils::getAllParaUnits(QMap& map, + bool bOnlyFitted, + bool bClearMap) +{ + return iGridRowUtils::getAllParaUnits(map, bOnlyFitted, bClearMap); +} + +// ================================================================ +// 参数项查找 +// ================================================================ + +iGridRowItem* nmGridRowUtils::getItemByPara(QString sPara) +{ + return iGridRowUtils::getItemByPara(sPara); +} + +QVariant nmGridRowUtils::getItemValueByPara(QString sPara) +{ + return iGridRowUtils::getItemValueByPara(sPara); +} + +// ================================================================ +// 参数来源标识 +// ================================================================ + +void nmGridRowUtils::setParaSrcTag(QString s) +{ + // 基类已有实现,直接转发 + iGridRowUtils::setParaSrcTag(s); +} + +// ================================================================ +// 序列化 +// ================================================================ + +void nmGridRowUtils::onSerialize(ZxSerializer* ser) +{ + iGridRowUtils::onSerialize(ser); +} + +void nmGridRowUtils::onDeserialize(ZxSerializer* ser) +{ + iGridRowUtils::onDeserialize(ser); +} + +// ================================================================ +// 结果组织 +// ================================================================ + +bool nmGridRowUtils::organizeResults(QVector& vec, + QString sType, + bool bMultiPhase) +{ + return iGridRowUtils::organizeResults(vec, sType, bMultiPhase); +} + +// ================================================================ +// 内部构建(protected) +// ================================================================ + +bool nmGridRowUtils::_buildRowUtils(QStringList listParas, + iGridRowItem* pItemParent, + bool bDnMode, + bool bProperOrder) +{ + return iGridRowUtils::_buildRowUtils(listParas, pItemParent, bDnMode, bProperOrder); +} + +bool nmGridRowUtils::createAndAddItem(iGridRowItem* pParent, + iParameter* p, + QString sPara) +{ + return iGridRowUtils::createAndAddItem(pParent, p, sPara); +} + +void nmGridRowUtils::connectSignalsOf(iGridRowItem* p) +{ + iGridRowUtils::connectSignalsOf(p); +} + +void nmGridRowUtils::bindItems() +{ + iGridRowUtils::bindItems(); +} + +// ================================================================ +// 槽函数 +// ================================================================ + +void nmGridRowUtils::slotValuePrevChanged(QVariant& o1, QVariant& o2) +{ + iGridRowUtils::slotValuePrevChanged(o1, o2); +} + +void nmGridRowUtils::slotGetValueOf(QString sPara, QVariant& o, bool& bOk) +{ + iGridRowUtils::slotGetValueOf(sPara, o, bOk); +} diff --git a/Src4/nmNum/nmGUI/nmGUI.pro b/Src4/nmNum/nmGUI/nmGUI.pro index 5150b01..4acdc9f 100644 --- a/Src4/nmNum/nmGUI/nmGUI.pro +++ b/Src4/nmNum/nmGUI/nmGUI.pro @@ -18,7 +18,35 @@ HEADERS += $${wtInclude}/nmNum/nmGUI/*.h \ INCLUDEPATH += $${geoHome}/3rd/JSON/rapidjson-1.1.0/include/ \ -INCLUDEPATH += $${wtInclude}/nmNum/nmGUI \ - $${wtInclude}/nmNum/nmData +# iBase 基础层(iDlgBase.h -> ZxUiBase.h / Defines.h / ZxBaseUtil.h 等) +INCLUDEPATH += $${wtInclude}/iBase +INCLUDEPATH += $${wtInclude}/iBase/iBase +INCLUDEPATH += $${wtInclude}/iBase/Interface +INCLUDEPATH += $${wtInclude}/iBase/iDefines +INCLUDEPATH += $${wtInclude}/iBase/iUtils +INCLUDEPATH += $${wtInclude}/iBase/iLogs +INCLUDEPATH += $${wtInclude}/iBase/iPlugin +INCLUDEPATH += $${wtInclude}/iBase/iProperty +INCLUDEPATH += $${wtInclude}/iBase/iUnit +INCLUDEPATH += $${wtInclude}/iBase/iXmlBase + +# iGui 界面层 +INCLUDEPATH += $${wtInclude}/iGui/iGuiBase +INCLUDEPATH += $${wtInclude}/iGui/iGuiGridPty + +# iData 数据层 +INCLUDEPATH += $${wtInclude}/iData +INCLUDEPATH += $${wtInclude}/iData/iDataPool +INCLUDEPATH += $${wtInclude}/iData/iDataEngine +INCLUDEPATH += $${wtInclude}/iData/iXmlManager +INCLUDEPATH += $${wtInclude}/iData/iXmlManager/Models +INCLUDEPATH += $${wtInclude}/iData/iSysUtils + +# nmNum 数值解模块 +INCLUDEPATH += $${wtInclude}/nmNum/nmGUI +INCLUDEPATH += $${wtInclude}/nmNum/nmData LIBS += -lnmData +LIBS += -liBase -liUtils -liPlugin -liLogs -liProperty -liUnit -liXmlBase +LIBS += -liDataPool -liSysUtils -liDataEngine +LIBS += -liGuiBase -liGuiGridPty