diff --git a/Include/nmNum/nmSubWnd/nmSubWndUtils.h b/Include/nmNum/nmSubWnd/nmSubWndUtils.h index f488a02..ecb06dd 100644 --- a/Include/nmNum/nmSubWnd/nmSubWndUtils.h +++ b/Include/nmNum/nmSubWnd/nmSubWndUtils.h @@ -156,4 +156,7 @@ public: QMap m_mapFittingKeys; // 外层成果窗口关闭时,其画布已在MDI Close阶段清理,后续子窗口Close不再重复处理 QSet m_closingMdiChildren; + + // 保存周期内是否已清空成果目录,确保多窗口保存时只清空一次 + bool m_bClearRootDone; }; diff --git a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp index 19f9a58..3254626 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp @@ -88,6 +88,7 @@ nmSubWndUtils::nmSubWndUtils() { m_pMainWnd = nullptr; m_pTabWx = nullptr; + m_bClearRootDone = false; // 加载NM模块专用参数定义XML(Bin/XmlFiles/ModelParaDefinesNM_cn.xml) { @@ -745,30 +746,15 @@ bool nmSubWndUtils::saveRsts(iSubWnd* pSubWnd, \ return false; } - // 获取当前Tab下所有流动段分析窗口,统一遍历保存。 - // 无论主窗口对哪个流动段分析窗口调用 saveRsts, - // 都会遍历当前Tab下所有有 DataManager 的窗口依次保存, - // 确保多窗口数据全部持久化。第一个窗口保存时清空成果目录, - // 后续窗口不再清空,避免误删其他窗口数据。 - ZxMainWindow* pMainWnd1 = const_cast(pMainWnd); - ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx(); - QVector vecAllFittingWnds = pMainWnd1->getAllSubWndsOf(pTabWx, "3004", false); - - bool bFirstSave = true; - foreach(iSubWnd* pSub, vecAllFittingWnds) { - iSubWndFitting* pFit = dynamic_cast(pSub); - if(pFit == nullptr) { - continue; - } - - nmDataAnalyzeManager* pMgr = nmDataAnalyzeManager::findManagerByFitting(pFit); - if(pMgr == nullptr) { - continue; - } - - // 第一个窗口保存时清空成果目录(清理旧窗口残留),后续窗口不再清空 - pMgr->saveNmResult(sRstName, pFit, bFirstSave); - bFirstSave = false; + // 对当前分析数据进行保存 + // 保存周期内只在第一个窗口保存时清空成果目录,后续窗口不再清空 + nmSubWndUtils* pUtils = nmSubWndUtils::getInstance(); + bool bClearRoot = (pUtils != nullptr) ? !pUtils->m_bClearRootDone : true; + if(!pDataManager->saveNmResult(sRstName, pSubWndF, bClearRoot)) { + return false; + } + if(pUtils != nullptr) { + pUtils->m_bClearRootDone = true; } } else if(pSubWnd->getWndID() == "5118") { return true; @@ -792,6 +778,11 @@ bool nmSubWndUtils::loadRsts(iSubWnd* pSubWnd, \ ZxMainWindow* pMainWnd1 = const_cast(pMainWnd); nmSubWndUtils* pUtilsInstance = nmSubWndUtils::getInstance(); + // 加载成果时重置清空标志,确保下次保存时第一个窗口会清空成果目录 + if(pUtilsInstance != nullptr) { + pUtilsInstance->m_bClearRootDone = false; + } + if(nullptr != pMainWnd1) { ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();