复用数值分析Dock初始化逻辑

- 抽取新建与加载分析共用的Dock装配函数
- 统一参数面板初始化及属性双向同步
- 统一数值设计和井列表信号连接
feature/nm-para-property-20260615
lvjunjie 1 day ago
parent 0c98bb90a7
commit e0777157df

@ -17,6 +17,7 @@ class QEvent;
class iSubWndFitting; class iSubWndFitting;
class nmDataAnalyzeManager; class nmDataAnalyzeManager;
class nmWxParaPropertyPebi; class nmWxParaPropertyPebi;
class nmSubWndMain;
// 本来主要是为数值部分提供SubWnd初始化构造的方法 // 本来主要是为数值部分提供SubWnd初始化构造的方法
class NM_SUB_WND_EXPORT nmSubWndUtils : public QObject class NM_SUB_WND_EXPORT nmSubWndUtils : public QObject
@ -144,6 +145,12 @@ public:
private: private:
// 统一装配新建、加载分析共用的数值设计与参数属性Dock控件
static void setupNumericalDockWidgets(nmDataAnalyzeManager* pDataManager,
nmSubWndMain* pSubWndMain,
iDockBaseWx* pWxDockNm1,
iDockBaseWx* pWxDockNm2);
// 监听外层MDI成果窗口切换区别于成果窗口内部的页签切换 // 监听外层MDI成果窗口切换区别于成果窗口内部的页签切换
void connectMdiActivation(iSubWndFitting* pSubWndF); void connectMdiActivation(iSubWndFitting* pSubWndF);
// 单独关闭流动段分析页签时,移除仍引用其数据的画布图元 // 单独关闭流动段分析页签时,移除仍引用其数据的画布图元

@ -380,6 +380,48 @@ void nmSubWndUtils::connectWellListSignals(nmDataAnalyzeManager* pDataManager,
static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection)); static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection));
} }
void nmSubWndUtils::setupNumericalDockWidgets(nmDataAnalyzeManager* pDataManager,
nmSubWndMain* pSubWndMain,
iDockBaseWx* pWxDockNm1,
iDockBaseWx* pWxDockNm2)
{
Q_ASSERT(pDataManager != nullptr);
Q_ASSERT(pSubWndMain != nullptr);
Q_ASSERT(pWxDockNm1 != nullptr);
Q_ASSERT(pWxDockNm2 != nullptr);
pWxDockNm1->setWindowTitle(tr("Generate numerical model"));
pWxDockNm2->setWindowTitle(tr("Parameters"));
// 参数面板绑定数据管理器后再重建,确保首次显示使用当前分析数据。
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
pParaWx->initUI();
pParaWx->setDataManager(pDataManager);
pParaWx->rebuildAllParas();
// 保持界面编辑与底层属性变化双向同步。
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
if (pReg != nullptr)
{
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
pReg, SLOT(setValue(QString, QVariant)));
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
}
// 数值设计面板只发出操作请求,具体处理仍由主窗口完成。
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
pSubWndMain, SLOT(onGenerateButtonClicked()));
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
pSubWndMain, SLOT(onWellSelected(QString)));
connectWellListSignals(pDataManager, pParaWx);
pWxDockNm1->setWidget(pAnalWx);
pWxDockNm2->setWidget(pParaWx);
}
bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd) bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
{ {
iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(pSubWnd); iSubWndFitting* pSubWndF = dynamic_cast<iSubWndFitting*>(pSubWnd);
@ -600,56 +642,8 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
ZxMainWindow* pMainWnd = pSubWndF->getMainWindow(); ZxMainWindow* pMainWnd = pSubWndF->getMainWindow();
// 设置当前窗口到Map // 设置当前窗口到Map
pSubWndMain->setMainWindow(pMainWnd); pSubWndMain->setMainWindow(pMainWnd);
setupNumericalDockWidgets(pDataManager, pSubWndMain,
pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title pWxDockNm1, pWxDockNm2);
pWxDockNm2->setWindowTitle(tr("Parameters"));
//QTextEdit* pWx1 = new QTextEdit("This is demo for upper");
//QTextEdit* pWx2 = new QTextEdit("This is demo for lower");
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
pParaWx->initUI();
pParaWx->setDataManager(pDataManager);
pParaWx->rebuildAllParas();
// 通过 nmAttrRegistry 批量读取储层参数初始化UI替代逐个 getter 调用)
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
// 双向同步连接UI→Data
if (pReg != nullptr)
{
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
pReg, SLOT(setValue(QString, QVariant)));
// Data→UI
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
}
// 建立求解调用连接
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
pSubWndMain, SLOT(onGenerateButtonClicked()));
// 切换查看井结果时刷新曲线窗口
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
pSubWndMain, SLOT(onWellSelected(QString)));
// 建立更新参数栏连接
//connect(pAnalWx, SIGNAL(sigIncludeWells()),
// pParaWx, SLOT(onUpdate()));
// 井图元更新连接
// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)),
// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*)));
// QTextEdit* pWx1 = new CustomParaWx("This is demo for upper");
// pWx1->...
// 建立井列表变化与参数面板的刷新连接
connectWellListSignals(pDataManager, pParaWx);
Q_ASSERT(nullptr != pAnalWx);
Q_ASSERT(nullptr != pParaWx);
pWxDockNm1->setWidget(pAnalWx);
pWxDockNm2->setWidget(pParaWx);
return true; //your own codes return true; //your own codes
} }
@ -881,45 +875,8 @@ bool nmSubWndUtils::loadRsts(iSubWnd* pSubWnd, \
nmSubWndMain* pSubWndMain = new nmSubWndMain(NULL, ""); nmSubWndMain* pSubWndMain = new nmSubWndMain(NULL, "");
ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(pMainWnd); ZxMainWindow* pMainWnd1 = const_cast<ZxMainWindow*>(pMainWnd);
pSubWndMain->setMainWindow(pMainWnd1); pSubWndMain->setMainWindow(pMainWnd1);
setupNumericalDockWidgets(pDataManager, pSubWndMain,
//pWxDockNm1->setWindowTitle(tr("Dock1's Title")); pWxDockNm1, pWxDockNm2);
//pWxDockNm2->setWindowTitle(tr("Dock2's Title"));
pWxDockNm1->setWindowTitle(tr("Generate numerical model")); //改变Title
pWxDockNm2->setWindowTitle(tr("Parameters"));
nmWxNumericalDesign* pAnalWx = new nmWxNumericalDesign();
nmWxParaPropertyPebi* pParaWx = new nmWxParaPropertyPebi();
pParaWx->initUI();
pParaWx->setDataManager(pDataManager);
pParaWx->rebuildAllParas();
nmAttrRegistry* pReg = pDataManager->getAttrRegistry();
// 建立求解调用连接
connect(pAnalWx, SIGNAL(sigGenerateClicked()),
pSubWndMain, SLOT(onGenerateButtonClicked()));
// 切换查看井结果时刷新曲线窗口
connect(pAnalWx, SIGNAL(sigResultWellChanged(QString)),
pSubWndMain, SLOT(onWellSelected(QString)));
// 双向同步连接
if (pReg != nullptr)
{
connect(pParaWx, SIGNAL(sigParaChanged(QString, QVariant)),
pReg, SLOT(setValue(QString, QVariant)));
connect(pReg, SIGNAL(sigAttrChanged(QString, QVariant)),
pParaWx, SLOT(slotSetParaValue(QString, QVariant)));
}
// 井图元更新连接
// connect(pAnalWx, SIGNAL(sigUpdateWellPlot(nmDataAnalyzeManager*)),
// pSubWndMain, SLOT(slotUpdateWellPlotByDataManager(nmDataAnalyzeManager*)));
// 建立井列表变化与参数面板的刷新连接
connectWellListSignals(pDataManager, pParaWx);
pWxDockNm1->setWidget(pAnalWx);
pWxDockNm2->setWidget(pParaWx);
// 判断是否保存了时间步数据 // 判断是否保存了时间步数据
if(!pDataManager->isTimeStepDataEmpty()) { if(!pDataManager->isTimeStepDataEmpty()) {

Loading…
Cancel
Save