#include "nmPebiResultPageInstaller.h" #include "iSubWndFitting.h" #include "nmDataAnalyzeManager.h" #include "nmWxParaPropertyPebi.h" #include "nmWxPebiResultViewWidget.h" #include #include #include #include #include bool nmPebiResultPageInstaller::installOrSynchronize( iSubWndFitting* pFitting, nmDataAnalyzeManager* pManager) { // Manager 必须属于目标分析窗口,防止把另一分析的快照装入当前结果页。 if(pFitting == nullptr || pManager == nullptr || pManager->getGridType() != NM_Grid_PEBI || nmDataAnalyzeManager::findManagerByFitting(pFitting) != pManager) { return false; } QString sErrorMessage; QWidget* p3DPage = pFitting->getFitSubRstWxOf( FSRT_Nm3D, true, &sErrorMessage); QWidget* pResultPage = pFitting->getFitSubRstWxOf( FSRT_NmRst, true, &sErrorMessage); if(p3DPage == nullptr || pResultPage == nullptr) { return false; } nmWxPebiResultViewWidget* pResultView = p3DPage->findChild(); if(pResultView == nullptr) { // 首次安装时复用载体已有布局,只移除旧业务控件和布局项。 QLayout* p3DLayout = p3DPage->layout(); if(p3DLayout == nullptr) { QVBoxLayout* pNewLayout = new QVBoxLayout(p3DPage); pNewLayout->setContentsMargins(0, 0, 0, 0); pNewLayout->setSpacing(0); p3DLayout = pNewLayout; } else { QLayoutItem* pItem = nullptr; while((pItem = p3DLayout->takeAt(0)) != nullptr) { if(pItem->widget() != nullptr) { delete pItem->widget(); } delete pItem; } } pResultView = new nmWxPebiResultViewWidget( pManager, p3DPage); p3DLayout->addWidget(pResultView); } else { // 相同 Manager 只同步;不同 Manager 由组合窗口完整清场后重新绑定。 pResultView->setDataManager(pManager); } nmWxParaPropertyPebi* pResultParameters = pResultPage->findChild(); if(pResultParameters == nullptr) { QLayout* pResultLayout = pResultPage->layout(); if(pResultLayout == nullptr) { QVBoxLayout* pNewLayout = new QVBoxLayout(pResultPage); pNewLayout->setContentsMargins(0, 0, 0, 0); pNewLayout->setSpacing(0); pResultLayout = pNewLayout; } else { QLayoutItem* pItem = nullptr; while((pItem = pResultLayout->takeAt(0)) != nullptr) { if(pItem->widget() != nullptr) { delete pItem->widget(); } delete pItem; } } // 保持既有稳定顺序:先在可见布局外构建只读参数,再挂入页面。 pResultParameters = new nmWxParaPropertyPebi(); pResultParameters->initUI(); pResultParameters->setDataManager(pManager); pResultParameters->rebuildResultParas(); pResultLayout->addWidget(pResultParameters); return true; } // 参数页未监听快照状态信号,每次生产入口同步均需显式重建。 pResultParameters->setDataManager(pManager); pResultParameters->rebuildResultParas(); return true; }