因为会对每个分析窗口调用saveRsts,所以不用在里面遍历所有窗口保存

feature/nm-para-property-20260615
lvjunjie 3 weeks ago
parent eaa0f08242
commit 30dd9b33af

@ -156,4 +156,7 @@ public:
QMap<QObject*, iSubWndFitting*> m_mapFittingKeys;
// 外层成果窗口关闭时其画布已在MDI Close阶段清理后续子窗口Close不再重复处理
QSet<QObject*> m_closingMdiChildren;
// 保存周期内是否已清空成果目录,确保多窗口保存时只清空一次
bool m_bClearRootDone;
};

@ -88,6 +88,7 @@ nmSubWndUtils::nmSubWndUtils()
{
m_pMainWnd = nullptr;
m_pTabWx = nullptr;
m_bClearRootDone = false;
// 加载NM模块专用参数定义XMLBin/XmlFiles/ModelParaDefinesNM_cn.xml
{
@ -745,30 +746,15 @@ bool nmSubWndUtils::saveRsts(iSubWnd* pSubWnd, \
return false;
}
// 获取当前Tab下所有流动段分析窗口统一遍历保存。
// 无论主窗口对哪个流动段分析窗口调用 saveRsts
// 都会遍历当前Tab下所有有 DataManager 的窗口依次保存,
// 确保多窗口数据全部持久化。第一个窗口保存时清空成果目录,
// 后续窗口不再清空,避免误删其他窗口数据。
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(pMainWnd);
ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();
QVector<iSubWnd*> vecAllFittingWnds = pMainWnd1->getAllSubWndsOf(pTabWx, "3004", false);
bool bFirstSave = true;
foreach(iSubWnd* pSub, vecAllFittingWnds) {
iSubWndFitting* pFit = dynamic_cast<iSubWndFitting*>(pSub);
if(pFit == nullptr) {
continue;
}
nmDataAnalyzeManager* pMgr = nmDataAnalyzeManager::findManagerByFitting(pFit);
if(pMgr == nullptr) {
continue;
// 对当前分析数据进行保存
// 保存周期内只在第一个窗口保存时清空成果目录,后续窗口不再清空
nmSubWndUtils* pUtils = nmSubWndUtils::getInstance();
bool bClearRoot = (pUtils != nullptr) ? !pUtils->m_bClearRootDone : true;
if(!pDataManager->saveNmResult(sRstName, pSubWndF, bClearRoot)) {
return false;
}
// 第一个窗口保存时清空成果目录(清理旧窗口残留),后续窗口不再清空
pMgr->saveNmResult(sRstName, pFit, bFirstSave);
bFirstSave = 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<ZxMainWindow*>(pMainWnd);
nmSubWndUtils* pUtilsInstance = nmSubWndUtils::getInstance();
// 加载成果时重置清空标志,确保下次保存时第一个窗口会清空成果目录
if(pUtilsInstance != nullptr) {
pUtilsInstance->m_bClearRootDone = false;
}
if(nullptr != pMainWnd1) {
ZxTabWidget* pTabWx = pMainWnd1->getCurTabWx();

Loading…
Cancel
Save