修复多个流动段分析时,通过分析切换窗口切换失败的问题

feature/nm-para-property-20260615
lvjunjie 3 weeks ago
parent 5eb9d7a0fa
commit e65a8a47fb

@ -113,6 +113,9 @@ public:
QString sRstName, \ QString sRstName, \
const ZxMainWindow* pMainWnd); const ZxMainWindow* pMainWnd);
/// @brief 获取缓存的TabWidget指针确保弹窗与MDI切换使用同一个容器指针比较才能正确
ZxTabWidget* getTabWidget() const { return m_pTabWx; }
public slots: public slots:
// 声明处理 ZxTabWidget 切换的槽函数 // 声明处理 ZxTabWidget 切换的槽函数
// 信号 currentChanged(int) 传递一个 int 参数 // 信号 currentChanged(int) 传递一个 int 参数

@ -4,6 +4,7 @@
#include "nmDataAnalyzeManager.h" #include "nmDataAnalyzeManager.h"
#include "nmSubWndGrid.h" #include "nmSubWndGrid.h"
#include "nmSubWndMain.h" #include "nmSubWndMain.h"
#include "nmSubWndUtils.h"
#include "nmSubWxsAnalyzeContext.h" #include "nmSubWxsAnalyzeContext.h"
#include "ZxMainWindow.h" #include "ZxMainWindow.h"
@ -38,8 +39,18 @@ void nmSubWndSubWxsAnalyzeController::updateWindowsForCurrentAnalyze(ZxMainWindo
return; 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<iSubWnd*> vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx); QVector<iSubWnd*> vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx);
// 本轮刷新只使用目标分析对应的数据中心,地图和网格保持同一个实例。 // 本轮刷新只使用目标分析对应的数据中心,地图和网格保持同一个实例。
nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF); nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF);
foreach (iSubWnd* pSub, vecSubWnds) { foreach (iSubWnd* pSub, vecSubWnds) {

@ -1314,11 +1314,21 @@ void nmSubWndUtils::slotHandleMdiSubWindowActivated(QMdiSubWindow* pSubWindow)
// 找到当前成果中的流动段分析窗口。 // 找到当前成果中的流动段分析窗口。
// 窗口ID为3004后续的数据中心和左侧面板都属于这个分析窗口。 // 窗口ID为3004后续的数据中心和左侧面板都属于这个分析窗口。
QVector<iSubWnd*> vecSubWnds = m_pMainWnd->getAllSubWndsOf(m_pTabWx, "3004", true); QVector<iSubWnd*> vecSubWnds = m_pMainWnd->getAllSubWndsOf(m_pTabWx, "3004", false);
if(vecSubWnds.isEmpty()) { if(vecSubWnds.isEmpty()) {
return; return;
} }
// 如果当前选中的分析属于本Tab容器维持用户通过弹窗或Tab点击的选择不变
iSubWndFitting* pCurFitting = nmDataAnalyzeManager::getCurrentFitting();
if(pCurFitting != nullptr) {
foreach(iSubWnd* pSub, vecSubWnds) {
if(pSub == pCurFitting) {
return;
}
}
}
iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(vecSubWnds.first()); iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(vecSubWnds.first());
if(pSubWndF == nullptr || nmDataAnalyzeManager::findManagerByFitting(pSubWndF) == nullptr) { if(pSubWndF == nullptr || nmDataAnalyzeManager::findManagerByFitting(pSubWndF) == nullptr) {
return; return;

Loading…
Cancel
Save