#include "nmSubWndSubWxsAnalyzeController.h" #include "iSubWndFitting.h" #include "nmDataAnalyzeManager.h" #include "nmSubWndGrid.h" #include "nmSubWndMain.h" #include "nmSubWxsAnalyzeContext.h" #include "ZxMainWindow.h" #include namespace { // nmSubWnd模块加载时注册分析窗口上下文提供者 struct nmSubWndSubWxsAnalyzeControllerRegister { nmSubWndSubWxsAnalyzeControllerRegister() { nmSubWxsAnalyzeContext::setProvider(nmSubWndSubWxsAnalyzeController::instance()); } }; nmSubWndSubWxsAnalyzeControllerRegister s_register; } // 获取功能界面上下文控制器单例 nmSubWndSubWxsAnalyzeController* nmSubWndSubWxsAnalyzeController::instance() { static nmSubWndSubWxsAnalyzeController s_controller; return &s_controller; } // 根据当前分析窗口刷新地图和表格子窗口 void nmSubWndSubWxsAnalyzeController::updateWindowsForCurrentAnalyze(ZxMainWindow* pMainWindow, iSubWndFitting* pCurSubWndF) { if(pMainWindow == nullptr || pCurSubWndF == nullptr) { return; } ZxTabWidget* pTabWx = pMainWindow->getCurTabWx(); QVector vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx); // 本轮刷新只使用目标分析对应的数据中心,地图和网格保持同一个实例。 nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF); foreach (iSubWnd* pSub, vecSubWnds) { nmSubWndMain* pMap = dynamic_cast(pSub); if(nullptr != pMap) { pMap->updateMapByDataManager(pManager); } nmSubWndGrid* pSubWndGrid = dynamic_cast(pSub); if(nullptr != pSubWndGrid) { QObject::disconnect(pManager, SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid())); QObject::connect(pManager, SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid()), Qt::QueuedConnection); pSubWndGrid->updateGrid(); } } }