From 30dd9b33afc272c829f4253aab322d04b46c3332 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Thu, 18 Jun 2026 15:39:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=A0=E4=B8=BA=E4=BC=9A=E5=AF=B9=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E5=88=86=E6=9E=90=E7=AA=97=E5=8F=A3=E8=B0=83=E7=94=A8?= =?UTF-8?q?saveRsts=EF=BC=8C=E6=89=80=E4=BB=A5=E4=B8=8D=E7=94=A8=E5=9C=A8?= =?UTF-8?q?=E9=87=8C=E9=9D=A2=E9=81=8D=E5=8E=86=E6=89=80=E6=9C=89=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/nmNum/nmSubWnd/nmSubWndUtils.h | 3 ++ Src/nmNum/nmSubWnd/nmSubWndUtils.cpp | 39 ++++++++++---------------- 2 files changed, 18 insertions(+), 24 deletions(-) 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();