Compare commits

..

No commits in common. '0cec2ca256dff479877ff28323c12c809c51b222' and '418c8e4d99a58230bb7621d43777399d2c70d690' have entirely different histories.

@ -2419,16 +2419,10 @@ void nmSubWndMain::displaySetting()
void nmSubWndMain::updateMapByDataManager(nmDataAnalyzeManager* pDataManager) void nmSubWndMain::updateMapByDataManager(nmDataAnalyzeManager* pDataManager)
{ {
// 删除原来的图元信息 // 删除原来的图元信息
if(m_pWxPlot == nullptr || pDataManager == nullptr) { if(m_pWxPlot == nullptr) {
return; return;
} }
foreach(nmDataAnalyzeManager* pManager, nmDataAnalyzeManager::s_mapDataAnalManager.values()) {
if(pManager != nullptr && pManager != pDataManager && pManager->getPlot() == m_pWxPlot) {
pManager->setPlot(nullptr);
}
}
// 更新对应的Plot成员变量 // 更新对应的Plot成员变量
pDataManager->setPlot(m_pWxPlot); pDataManager->setPlot(m_pWxPlot);

@ -40,17 +40,16 @@ void nmSubWndSubWxsAnalyzeController::updateWindowsForCurrentAnalyze(ZxMainWindo
ZxTabWidget* pTabWx = pMainWindow->getCurTabWx(); ZxTabWidget* pTabWx = pMainWindow->getCurTabWx();
QVector<iSubWnd*> vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx); QVector<iSubWnd*> vecSubWnds = pMainWindow->getAllSubWndsOf(pTabWx);
nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF);
foreach (iSubWnd* pSub, vecSubWnds) { foreach (iSubWnd* pSub, vecSubWnds) {
nmSubWndMain* pMap = dynamic_cast<nmSubWndMain*>(pSub); nmSubWndMain* pMap = dynamic_cast<nmSubWndMain*>(pSub);
if(nullptr != pMap) { if(nullptr != pMap) {
pMap->updateMapByDataManager(pManager); pMap->updateMapByDataManager(nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF));
} }
nmSubWndGrid* pSubWndGrid = dynamic_cast<nmSubWndGrid*>(pSub); nmSubWndGrid* pSubWndGrid = dynamic_cast<nmSubWndGrid*>(pSub);
if(nullptr != pSubWndGrid) { if(nullptr != pSubWndGrid) {
QObject::disconnect(pManager, SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid())); QObject::disconnect(nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF), SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid()));
QObject::connect(pManager, SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid()), Qt::QueuedConnection); QObject::connect(nmDataAnalyzeManager::getInstanceByFitting(pCurSubWndF), SIGNAL(dataChanged()), pSubWndGrid, SLOT(updateGrid()), Qt::QueuedConnection);
pSubWndGrid->updateGrid(); pSubWndGrid->updateGrid();
} }
} }

@ -1167,25 +1167,12 @@ bool nmSubWndUtils::eventFilter(QObject* pObject, QEvent* pEvent)
void nmSubWndUtils::detachFittingPlot(iSubWndFitting* pSubWndF) void nmSubWndUtils::detachFittingPlot(iSubWndFitting* pSubWndF)
{ {
nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::findManagerByFitting(pSubWndF); nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::findManagerByFitting(pSubWndF);
if(pDataManager == nullptr) { // 当前画布可能已经切换到其他分析,只清理由被关闭分析正在展示的图元。
return; if(pDataManager != nullptr && nmDataAnalyzeManager::getCurrentFitting() == pSubWndF) {
} nmGuiPlot* pPlot = pDataManager->getPlot();
if(pPlot != nullptr) {
nmGuiPlot* pPlot = pDataManager->getPlot(); // 画布图元引用DataManager中的数据释放数据前先移除仍在显示的图元。
if(pPlot == nullptr) { pPlot->deleteAllPlotObjs();
return;
}
// 关闭页签时可能会先触发页签切换导致Map短暂刷新到待关闭分析。
// 以DataManager是否仍绑定Plot判断Map是否实际展示该分析避免只看currentFitting误判。
pPlot->deleteAllPlotObjs();
pDataManager->setPlot(nullptr);
if(nmDataAnalyzeManager::getCurrentFitting() != pSubWndF) {
nmDataAnalyzeManager* pCurManager = nmDataAnalyzeManager::getCurrentInstance();
if(pCurManager != nullptr) {
pCurManager->setPlot(pPlot);
pPlot->setPlotsByDataManger(pCurManager);
} }
} }
} }

Loading…
Cancel
Save