From e65a8a47fbafa75e69e587383530c2ae2e874ffc Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Thu, 18 Jun 2026 10:43:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=9A=E4=B8=AA=E6=B5=81?= =?UTF-8?q?=E5=8A=A8=E6=AE=B5=E5=88=86=E6=9E=90=E6=97=B6=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=88=86=E6=9E=90=E5=88=87=E6=8D=A2=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/nmNum/nmSubWnd/nmSubWndUtils.h | 3 +++ .../nmSubWnd/nmSubWndSubWxsAnalyzeController.cpp | 13 ++++++++++++- Src/nmNum/nmSubWnd/nmSubWndUtils.cpp | 12 +++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Include/nmNum/nmSubWnd/nmSubWndUtils.h b/Include/nmNum/nmSubWnd/nmSubWndUtils.h index f9674b1..f488a02 100644 --- a/Include/nmNum/nmSubWnd/nmSubWndUtils.h +++ b/Include/nmNum/nmSubWnd/nmSubWndUtils.h @@ -113,6 +113,9 @@ public: QString sRstName, \ const ZxMainWindow* pMainWnd); + /// @brief 获取缓存的TabWidget指针,确保弹窗与MDI切换使用同一个容器,指针比较才能正确 + ZxTabWidget* getTabWidget() const { return m_pTabWx; } + public slots: // 声明处理 ZxTabWidget 切换的槽函数 // 信号 currentChanged(int) 传递一个 int 参数 diff --git a/Src/nmNum/nmSubWnd/nmSubWndSubWxsAnalyzeController.cpp b/Src/nmNum/nmSubWnd/nmSubWndSubWxsAnalyzeController.cpp index f2a3169..1292a45 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndSubWxsAnalyzeController.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndSubWxsAnalyzeController.cpp @@ -4,6 +4,7 @@ #include "nmDataAnalyzeManager.h" #include "nmSubWndGrid.h" #include "nmSubWndMain.h" +#include "nmSubWndUtils.h" #include "nmSubWxsAnalyzeContext.h" #include "ZxMainWindow.h" @@ -38,8 +39,18 @@ void nmSubWndSubWxsAnalyzeController::updateWindowsForCurrentAnalyze(ZxMainWindo return; } - ZxTabWidget* pTabWx = pMainWindow->getCurTabWx(); + // 使用nmSubWndUtils缓存的pTabWx,与slotHandleMdiSubWindowActivated保持一致 + nmSubWndUtils* pUtils = nmSubWndUtils::getInstance(); + ZxTabWidget* pTabWx = nullptr; + if(pUtils != nullptr) { + pTabWx = pUtils->getTabWidget(); + } + if(pTabWx == nullptr) { + pTabWx = pMainWindow->getCurTabWx(); + } + QVector vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx); + // 本轮刷新只使用目标分析对应的数据中心,地图和网格保持同一个实例。 nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF); foreach (iSubWnd* pSub, vecSubWnds) { diff --git a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp index 4702052..19f9a58 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp @@ -1314,11 +1314,21 @@ void nmSubWndUtils::slotHandleMdiSubWindowActivated(QMdiSubWindow* pSubWindow) // 找到当前成果中的流动段分析窗口。 // 窗口ID为3004,后续的数据中心和左侧面板都属于这个分析窗口。 - QVector vecSubWnds = m_pMainWnd->getAllSubWndsOf(m_pTabWx, "3004", true); + QVector vecSubWnds = m_pMainWnd->getAllSubWndsOf(m_pTabWx, "3004", false); if(vecSubWnds.isEmpty()) { return; } + // 如果当前选中的分析属于本Tab容器,维持用户通过弹窗或Tab点击的选择不变 + iSubWndFitting* pCurFitting = nmDataAnalyzeManager::getCurrentFitting(); + if(pCurFitting != nullptr) { + foreach(iSubWnd* pSub, vecSubWnds) { + if(pSub == pCurFitting) { + return; + } + } + } + iSubWndFitting* pSubWndF = dynamic_cast(vecSubWnds.first()); if(pSubWndF == nullptr || nmDataAnalyzeManager::findManagerByFitting(pSubWndF) == nullptr) { return;