From 7ae104839d44d95ad9a5b52d0a93996a52420490 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Wed, 10 Jun 2026 16:26:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=95=8C=E9=9D=A2=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=98=BE=E7=A4=BA=E5=BD=93=E5=89=8D=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 100498 -> 101111 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 28 +++++++++ Include/nmNum/nmSubWxs/nmWxNumericalDesign.h | 11 +++- Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp | 60 +++++++++++++++++++ 4 files changed, 98 insertions(+), 1 deletion(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 43deca2e69236cf042f997ed5ac4ef4bfac4ad2b..7c158644982ed26b9659bfc5ef73598b87d5b1da 100644 GIT binary patch delta 2995 zcmZ{md0dp`7RS%?yt6PbGifWe(by~Sk~FW5AUamF(M8G*o}M2V9%Sj=bf%u9Hj5Air9 zb_xb<`8j}vqkvW3CH@L5E(~DlYs7LK7K~c!HjrKN2N;S6*@v@%W$u?~QK4DZC1yB+ zytxqR!fWIq1ekc-P*Jz2m<3`A`#z-thoGUj37(GFL@eHu4e}nv! zKw9@DiH(B9(JElzXVftj|D6RkG9sQ1&i{kI33xt7b-VXVOpFHqhns+<45PW(KK;l;r zV*53~*Ch}U83FL(8Hh-+(q?@LMxX=F2!hys@xYvKOAMI-sTofK%f16?*(U)$J_{Lj zF~H-nUg@wk#y7K1kl#vB|bWCo&_ zjfGFq;bI%TQ^7G#@T|#}igypN&DRxClK_#lXtEP_9bj=4Ldj^gP)e z7pq$Nv^I1Rjbi#%)?8K%Ec`qci^hP$F4j@i2vFh3PI+_#3lrIu@81F#PGGloYy{Y2 zVV}z?fK5D&ouVONniE%_I0&rteXfcA0hln4yJpg{WYqBqxD=QSdE}*w^mrX=Y`ZE$ zUgVpv9|Z7gRG&kW29y!ud2mP&6ubV^C@74S|NOOEkNd{Li_*?PSG;Kw2{`TED|O?PD=805E7%Q zhQMYaS>Z>#iE_IDgDZtj*e+yzdlwia37NYLG{Yt#Ya=b~StjHqkqC_SLP4Sju-x~s z*v`O{9>E4XLs_1yPGQcK@%s)anxxWlpVU%$4B_u9GjeR387qG?ttyNL+vgXV;fyFmU zG`UGkT_$mIvc#fCB^K96oU%b;*=&gw=@MsLknLO+0nAh)Yi*?7J$z+tH+R!X$I9CG zK1AlSP4?ogvj9sJBgE?tWOdY-cvd)+O3@?rGyc#2zgVY`RPH*$_mL)Th>$`+fa z8;1b~JZv^)eNW^1v(2-N*3UnOa;;vB{=w!@dI))7C`M{?c*zEA(CQ1O=c;6v)&iTp zQ>D4{`)K!Tk?y9A?I6%Hk zRbN0(`TfQy?*ESZO}{1{tbYOE%L4J}PTJI@@#5R31L%Dq5HEXK zoT5*Nmru~+-=jGA$S7bX=P^O2a|&N$3+w1&Dh;p|+W$d^S%h9}bJdU>08Q9PCt64zjh zw}I!zVW0O(p3#A3pD6YnHu&VKzENjyTuk%Sgg1S*Ys1#4cl<&gkw03!tCWPrtm-{& zbLji8xM_^uHSIC=;ng1kYCcOH73y$+pRU+Vzy1<1RhZqQO+V9amSE)A9BuYqy9=K=0Jwi6F{RS(;@yM5 zCh4$ctdU39q*MXf&GS#kIB7^A`Ecoj>2M+Q?p~kAEG*ig#<{R~$xnsX3SD6VEP+Kf z1i>y@0?>T;t{<8`mh<=~~y-m&0nuwgSOMd!q-J>WfsLr~m zy4Gh=-F&HZsanS(_Jlmvp(f)0RO?+b67`3kAE@{D_&=%l&*C4bxcliTOd0$ikzZ`; delta 2540 zcmXBWd0Z6d83*v^eP?Hv8FrUTu2ohAS#*^}ITjRH6a)mhg_T>yJBqgYQN)O1<53Z) z`oyyy@t~dzw@k+4Ks?{26)oMJVY0^;hg!$|H+1Z(Q-gn;T`OW;eUcGLu zdQA^DZLQ}NUNn7em64|=t=)DnG-4!x7!53XuVPB3Vs5-*L8D^vc*Su~u#s7K@NC`FlYjU@faE>Ea?UB1mH~_!1T6fn;;8$W$EWb*-Ppq4@u=H)La-Q$ zwgSxc05;x1{vX&-5uoxIIT*VHt6|(!P+bcIcozezucrb_UZgnY4yLP`I#5Mw?N}!1(uZy8oxwRHnI}et4+K>hb?Mj&e$)&3g6Hp4~Aj;Vu1B{sAzcr ziKG4iEcGNLrL_XwYKKu3LxG8vibKDIRO@Lz(R|$>UvjX=(np)KPx8Z!V-Nw!1blD!hZen= zL}y{AlSMAx1#OXeR1YsvCnfRGGcZpw@!`*~O4`l~E6`82%88TNrozdTo?5N zFku$=N}~J>nA({A`2oq7KHS*vV4Azdo`PxLD zWyBUbGCBb7YN<6lF;TaePe??Eu5UK*T5iNNZDbbwsaFxYbVjEg+f+5ZG3pHkTb#;So(IHr?>Fo zvDl!u6sA8B<{VD}fOKKwavEsJW?|=_e@E3>DeTH@0GM_|*mrj~FpDT0RL`UvH48`E z-cp%d7d}7K2~elV0>g#Y{e{4?Wuf%|k{KB6QqK!-VvEaHOCnrUn^H~z8#X~P`l(_< zhGL4BVvbF5Oq}A_62<&sip2)S(w(ZUABF>qF{`%Mp9ALWuiA6>6WRuys^KsFDK9=& z?S0S=Fkjs*{_HwH9r+X3)UX6Yp8FIutu{Oy8EVmiwc}yKZ z3H0~~ur!-^Y;gxLuQ6h?c^feI5b^ZvLp0Gz;+gy_R38k*9yVU;gNa1mb6noTY6zLF z4w^X&Ak14Gbg6=Zsa9?2MT2Eu#LgZSECtg&O$PH*^}3b!0Nxta=;#N`X}DrY7uI>& zd15F&A~FtOte1r+UBq%?Xc2DnGP#c$t1(RU09dl1TUHc=onAKg^kPl)!dPnAcbd5H zFxu)O4D`0i6I7b%K?8sdJdNevEBr$~*Hl9)HAuUnwV!6?r;7ou^w6w4(nhiNNA&b5 zdbp{q_x{!tVV2}h-n8j8XE`BLP-0)PQrifg0PHXWDZ&(%;xGW6@2 z5g+kbDpOP7*v-S>^pNX}yUD<-<#N1NdGw02;&iDA%&+cwrCwHEv)8C-{ z;sXz0c{{MgXmk%%Im1eN*W{a>g@)&}nL$`*G?}gMon6ELU>S3rUG~wp!qa=sF6}|o zb|;)YEf)Y@q&oZdruNIE{4(13=qB{*ZR9cK7~9*%b6l{Bh_ho$ZwpV?|(ok#uj0e1D-U>Ks(Zux~WBIAX2M?Mu6o1opfXF3gj9UJ?a^dm=V zk5+#TQ1g53@rC>-_s-lYe4amP3~&lmJ*}>T;@vP<*b`O>DbO zv01H~7vZ2UgBab?zjXi%-lJQU Current well: 当前井: + + Current model + 当前模型 + + + Oil single-phase constant pvt + 油单相常数pvt + + + Oil single-phase variable pvt + 油单相变化pvt + + + Water single-phase constant pvt + 水单相常数pvt + + + Water single-phase variable pvt + 水单相变化pvt + + + Gas single-phase variable pvt + 气单相变化pvt + + + Oil-water two-phase + 油水两相 + Include other wells 包含其他井 diff --git a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h index b63e67a..37898e9 100644 --- a/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h +++ b/Include/nmNum/nmSubWxs/nmWxNumericalDesign.h @@ -85,9 +85,12 @@ signals: private: // 初始化UI组件的私有函数 - void initMainOptionsGroup(); // 初始化主选项组 + // 初始化主选项组 + void initMainOptionsGroup(); // 初始化查看井结果组 void initResultWellGroup(); + // 初始化当前模型显示组 + void initCurrentModelGroup(); void initOutputGroup(); // 初始化输出组 (新) void initAdvancedGroup(); // 初始化高级组 (新) void initTimeSteppingGroup(); // 初始化时间步进组 @@ -101,6 +104,8 @@ private: void updateDataFromUi(); // 填充查看井结果下拉框 void fillResultWellCombo(const QString& selectedWellName = QString()); + // 刷新当前模型显示 + void updateCurrentModelDisplay(); private: @@ -118,6 +123,10 @@ private: QComboBox* m_pResultWellCombo; bool m_bFillingResultWellCombo; + // 当前模型显示 + QGroupBox* m_pCurrentModelGroup; + QLabel* m_pCurrentModelValueLabel; + // 输出组组件 (新) QGroupBox* m_pOutputGroup; // 输出分组框 QCheckBox* m_pOutputResultFieldsCheck; // 输出结果文件复选框 diff --git a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp index 182f2be..aa693e3 100644 --- a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp +++ b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp @@ -41,6 +41,27 @@ static bool isNumericalDesignDebugOptionsVisible() return false; } +// 显示当前模型类型 +static QString solverModelDisplayName(NM_SOLVER_MODEL_TYPE eType) +{ + switch(eType) { + case SMT_Oil_ConstPvt: + return nmWxNumericalDesign::tr("Oil single-phase constant pvt"); + case SMT_Oil_VariablePvt: + return nmWxNumericalDesign::tr("Oil single-phase variable pvt"); + case SMT_Water_ConstPvt: + return nmWxNumericalDesign::tr("Water single-phase constant pvt"); + case SMT_Water_VariablePvt: + return nmWxNumericalDesign::tr("Water single-phase variable pvt"); + case SMT_Gas_VariablePvt: + return nmWxNumericalDesign::tr("Gas single-phase variable pvt"); + case SMT_Oil_Water_TwoPhase: + return nmWxNumericalDesign::tr("Oil-water two-phase"); + default: + return QString(); + } +} + nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent) : iDlgBase(parent) { @@ -48,6 +69,8 @@ nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent) s_pCurrentInstance = this; m_pResultWellGroup = nullptr; m_pResultWellCombo = nullptr; + m_pCurrentModelGroup = nullptr; + m_pCurrentModelValueLabel = nullptr; m_bFillingResultWellCombo = false; // 初始化图标路径 @@ -70,6 +93,7 @@ nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent) // 初始化所有UI组件 initMainOptionsGroup(); // 初始化主选项组 initResultWellGroup(); + initCurrentModelGroup(); initOutputGroup(); // 初始化输出组 (新) initAdvancedGroup(); // 初始化高级组 (新) initTimeSteppingGroup(); // 初始化时间步进组 @@ -79,6 +103,7 @@ nmWxNumericalDesign::nmWxNumericalDesign(QWidget *parent) // 将各个组添加到滚动区域的布局中 pScrollLayout->addWidget(m_pMainOptionsGroup); pScrollLayout->addWidget(m_pResultWellGroup); + pScrollLayout->addWidget(m_pCurrentModelGroup); pScrollLayout->addWidget(m_pOutputGroup); pScrollLayout->addWidget(m_pAdvancedGroup); pScrollLayout->addWidget(m_pTimeSteppingGroup); @@ -132,6 +157,7 @@ void nmWxNumericalDesign::activateCurrentInstance() s_pCurrentInstance = this; // 调用前已经切换到当前成果的数据中心,此处按照当前成果重新填充下拉框。 fillResultWellCombo(); + updateCurrentModelDisplay(); } // 外部刷新当前查看井下拉框 @@ -163,6 +189,40 @@ void nmWxNumericalDesign::initResultWellGroup() m_pResultWellGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); } +// 显示当前模型名 +void nmWxNumericalDesign::initCurrentModelGroup() +{ + m_pCurrentModelGroup = new QGroupBox(tr("Current model"), this); + QGridLayout* pGridLayout = new QGridLayout(m_pCurrentModelGroup); + + m_pCurrentModelValueLabel = new QLabel(this); + m_pCurrentModelValueLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); + m_pCurrentModelValueLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + updateCurrentModelDisplay(); + + pGridLayout->addWidget(m_pCurrentModelValueLabel, 0, 0); + pGridLayout->setColumnStretch(0, 1); + + m_pCurrentModelGroup->setLayout(pGridLayout); + m_pCurrentModelGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); +} + +// 按当前成果对应的数据管理器刷新模型名 +void nmWxNumericalDesign::updateCurrentModelDisplay() +{ + if(m_pCurrentModelValueLabel == nullptr) { + return; + } + + nmDataAnalyzeManager* pManager = nmDataAnalyzeManager::getCurrentInstance(); + if(pManager == nullptr) { + m_pCurrentModelValueLabel->clear(); + return; + } + + m_pCurrentModelValueLabel->setText(solverModelDisplayName(pManager->getSolverModelType())); +} + // 按参与计算井刷新下拉框 void nmWxNumericalDesign::fillResultWellCombo(const QString& selectedWellName) {