Compare commits

...

2 Commits

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

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

@ -1167,12 +1167,25 @@ bool nmSubWndUtils::eventFilter(QObject* pObject, QEvent* pEvent)
void nmSubWndUtils::detachFittingPlot(iSubWndFitting* pSubWndF)
{
nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::findManagerByFitting(pSubWndF);
// 当前画布可能已经切换到其他分析,只清理由被关闭分析正在展示的图元。
if(pDataManager != nullptr && nmDataAnalyzeManager::getCurrentFitting() == pSubWndF) {
nmGuiPlot* pPlot = pDataManager->getPlot();
if(pPlot != nullptr) {
// 画布图元引用DataManager中的数据释放数据前先移除仍在显示的图元。
pPlot->deleteAllPlotObjs();
if(pDataManager == nullptr) {
return;
}
nmGuiPlot* pPlot = pDataManager->getPlot();
if(pPlot == nullptr) {
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