From e0777157df6324f814fde4e0a1c647949bab1103 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Wed, 29 Jul 2026 09:43:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E7=94=A8=E6=95=B0=E5=80=BC=E5=88=86?= =?UTF-8?q?=E6=9E=90Dock=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 抽取新建与加载分析共用的Dock装配函数 - 统一参数面板初始化及属性双向同步 - 统一数值设计和井列表信号连接 --- Include/nmNum/nmSubWnd/nmSubWndUtils.h | 7 ++ Src/nmNum/nmSubWnd/nmSubWndUtils.cpp | 135 +++++++++---------------- 2 files changed, 53 insertions(+), 89 deletions(-) diff --git a/Include/nmNum/nmSubWnd/nmSubWndUtils.h b/Include/nmNum/nmSubWnd/nmSubWndUtils.h index fb04f9e..2f04a2e 100644 --- a/Include/nmNum/nmSubWnd/nmSubWndUtils.h +++ b/Include/nmNum/nmSubWnd/nmSubWndUtils.h @@ -17,6 +17,7 @@ class QEvent; class iSubWndFitting; class nmDataAnalyzeManager; class nmWxParaPropertyPebi; +class nmSubWndMain; // 本来主要是为数值部分提供SubWnd初始化构造的方法 class NM_SUB_WND_EXPORT nmSubWndUtils : public QObject @@ -144,6 +145,12 @@ public: private: + // 统一装配新建、加载分析共用的数值设计与参数属性Dock控件 + static void setupNumericalDockWidgets(nmDataAnalyzeManager* pDataManager, + nmSubWndMain* pSubWndMain, + iDockBaseWx* pWxDockNm1, + iDockBaseWx* pWxDockNm2); + // 监听外层MDI成果窗口切换,区别于成果窗口内部的页签切换 void connectMdiActivation(iSubWndFitting* pSubWndF); // 单独关闭流动段分析页签时,移除仍引用其数据的画布图元 diff --git a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp index 5ce3958..47a7c12 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp @@ -380,6 +380,48 @@ void nmSubWndUtils::connectWellListSignals(nmDataAnalyzeManager* pDataManager, static_cast(Qt::QueuedConnection | Qt::UniqueConnection)); } +void nmSubWndUtils::setupNumericalDockWidgets(nmDataAnalyzeManager* pDataManager, + nmSubWndMain* pSubWndMain, + iDockBaseWx* pWxDockNm1, + iDockBaseWx* pWxDockNm2) +{ + Q_ASSERT(pDataManager != nullptr); + Q_ASSERT(pSubWndMain != nullptr); + Q_ASSERT(pWxDockNm1 != nullptr); + Q_ASSERT(pWxDockNm2 != nullptr); + + pWxDockNm1->setWindowTitle(tr("Generate numerical model")); + pWxDockNm2->setWindowTitle(tr("Parameters")); + + // 参数面板绑定数据管理器后再重建,确保首次显示使用当前分析数据。 + nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign(); + nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi(); + pParaWx->initUI(); + pParaWx->setDataManager(pDataManager); + pParaWx->rebuildAllParas(); + + // 保持界面编辑与底层属性变化双向同步。 + nmAttrRegistry* pReg = pDataManager->getAttrRegistry(); + if (pReg != nullptr) + { + connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)), + pReg, SLOT(setValue(QString, QVariant))); + connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)), + pParaWx, SLOT(slotSetParaValue(QString, QVariant))); + } + + // 数值设计面板只发出操作请求,具体处理仍由主窗口完成。 + connect(pAnalWx, SIGNAL(sigGenerateClicked()), + pSubWndMain, SLOT(onGenerateButtonClicked())); + connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)), + pSubWndMain, SLOT(onWellSelected(QString))); + + connectWellListSignals(pDataManager, pParaWx); + + pWxDockNm1->setWidget(pAnalWx); + pWxDockNm2->setWidget(pParaWx); +} + bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd) { iSubWndFitting* pSubWndF = dynamic_cast(pSubWnd); @@ -600,56 +642,8 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd) ZxMainWindow* pMainWnd = pSubWndF->getMainWindow(); // 设置当前窗口到Map pSubWndMain->setMainWindow(pMainWnd); - - pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title - pWxDockNm2->setWindowTitle(tr("Parameters")); - - //QTextEdit* pWx1 = new QTextEdit("This is demo for upper"); - //QTextEdit* pWx2 = new QTextEdit("This is demo for lower"); - nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign(); - nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi(); - pParaWx->initUI(); - pParaWx->setDataManager(pDataManager); - pParaWx->rebuildAllParas(); - - // 通过 nmAttrRegistry 批量读取储层参数初始化UI(替代逐个 getter 调用) - nmAttrRegistry* pReg = pDataManager->getAttrRegistry(); - - // 双向同步连接:UI→Data - if (pReg != nullptr) - { - connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)), - pReg, SLOT(setValue(QString, QVariant))); - // Data→UI - connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)), - pParaWx, SLOT(slotSetParaValue(QString, QVariant))); - } - - // 建立求解调用连接 - connect(pAnalWx, SIGNAL(sigGenerateClicked()), - pSubWndMain, SLOT(onGenerateButtonClicked())); - // 切换查看井结果时刷新曲线窗口 - connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)), - pSubWndMain, SLOT(onWellSelected(QString))); - - // 建立更新参数栏连接 - //connect(pAnalWx, SIGNAL(sigIncludeWells()), - // pParaWx, SLOT(onUpdate())); - - // 井图元更新连接 -// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)), -// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*))); - - // QTextEdit* pWx1 = new CustomParaWx("This is demo for upper"); - // pWx1->... - // 建立井列表变化与参数面板的刷新连接 - connectWellListSignals(pDataManager, pParaWx); - - Q_ASSERT(nullptr != pAnalWx); - Q_ASSERT(nullptr != pParaWx); - - pWxDockNm1->setWidget(pAnalWx); - pWxDockNm2->setWidget(pParaWx); + setupNumericalDockWidgets(pDataManager, pSubWndMain, + pWxDockNm1, pWxDockNm2); return true; //your own codes } @@ -881,45 +875,8 @@ bool nmSubWndUtils::loadRsts(iSubWnd* pSubWnd, \ nmSubWndMain* pSubWndMain = new nmSubWndMain(NULL, ""); ZxMainWindow* pMainWnd1 = const_cast(pMainWnd); pSubWndMain->setMainWindow(pMainWnd1); - - //pWxDockNm1->setWindowTitle(tr("Dock1's Title")); - //pWxDockNm2->setWindowTitle(tr("Dock2's Title")); - pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title - pWxDockNm2->setWindowTitle(tr("Parameters")); - - nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign(); - nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi(); - pParaWx->initUI(); - pParaWx->setDataManager(pDataManager); - pParaWx->rebuildAllParas(); - - nmAttrRegistry* pReg = pDataManager->getAttrRegistry(); - - // 建立求解调用连接 - connect(pAnalWx, SIGNAL(sigGenerateClicked()), - pSubWndMain, SLOT(onGenerateButtonClicked())); - // 切换查看井结果时刷新曲线窗口 - connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)), - pSubWndMain, SLOT(onWellSelected(QString))); - - // 双向同步连接 - if (pReg != nullptr) - { - connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)), - pReg, SLOT(setValue(QString, QVariant))); - connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)), - pParaWx, SLOT(slotSetParaValue(QString, QVariant))); - } - - // 井图元更新连接 -// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)), -// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*))); - - // 建立井列表变化与参数面板的刷新连接 - connectWellListSignals(pDataManager, pParaWx); - - pWxDockNm1->setWidget(pAnalWx); - pWxDockNm2->setWidget(pParaWx); + setupNumericalDockWidgets(pDataManager, pSubWndMain, + pWxDockNm1, pWxDockNm2); // 判断是否保存了时间步数据 if(!pDataManager->isTimeStepDataEmpty()) {