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;