From c3297259b223865309eda3236b7c39c84201ce36 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Thu, 10 Sep 2026 16:46:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(nmNum):=20LM=20=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=E7=A6=81=E7=94=A8=20PSO=20=E5=8A=A0=E9=80=9F=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 选择 LM 时置灰 PSO 加速标签和下拉框 - 切回 PSO 时恢复可用状态并保留原选择 --- Include/nmNum/nmSubWxs/nmWxAutomaticFitting.h | 2 ++ Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Include/nmNum/nmSubWxs/nmWxAutomaticFitting.h b/Include/nmNum/nmSubWxs/nmWxAutomaticFitting.h index 56e21a2..9e525e5 100644 --- a/Include/nmNum/nmSubWxs/nmWxAutomaticFitting.h +++ b/Include/nmNum/nmSubWxs/nmWxAutomaticFitting.h @@ -40,6 +40,7 @@ public: void onAccept(); void onReject(); void onWellSelected(int index); + void onAlgorithmChanged(int index); void onParameterTableItemChanged(QTableWidgetItem* item); // 自动拟合相关槽函数 @@ -81,6 +82,7 @@ private: QLineEdit* m_errorLimitEdit; QComboBox* m_targetWellCombo; QComboBox* m_algorithmCombo; + QLabel* m_surrogateLabel; QComboBox* m_surrogateCombo; // 参数复选框 diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp index 492544d..449f425 100644 --- a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp +++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp @@ -817,14 +817,15 @@ void nmWxAutomaticFitting::setupControlPanel() m_algorithmCombo->setMaximumWidth(160); m_algorithmCombo->setMinimumWidth(160); - QLabel* surrogateLabel = new QLabel(tr("PSO acceleration:")); + m_surrogateLabel = new QLabel(tr("PSO acceleration:")); m_surrogateCombo = new QComboBox(); - //m_surrogateCombo->setEnabled(false);// 暂时不可编辑 m_surrogateCombo->addItem(tr("Off")); m_surrogateCombo->addItem(tr("On")); m_surrogateCombo->setCurrentIndex(automaticFittingData.getSurrogateScreeningEnabled() ? 1 : 0); m_surrogateCombo->setMaximumWidth(160); m_surrogateCombo->setMinimumWidth(160); + connect(m_algorithmCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onAlgorithmChanged(int))); + onAlgorithmChanged(m_algorithmCombo->currentIndex()); // 迭代次数 QLabel* iterationLabel = new QLabel(tr("Number of iterations:")); @@ -876,7 +877,7 @@ void nmWxAutomaticFitting::setupControlPanel() m_controlLayout->addWidget(m_algorithmCombo); m_controlLayout->addSpacing(15); - m_controlLayout->addWidget(surrogateLabel); + m_controlLayout->addWidget(m_surrogateLabel); m_controlLayout->addWidget(m_surrogateCombo); m_controlLayout->addSpacing(15); @@ -895,6 +896,14 @@ void nmWxAutomaticFitting::setupControlPanel() m_controlLayout->addStretch(1); } +void nmWxAutomaticFitting::onAlgorithmChanged(int index) +{ + // LM 不使用 PSO 加速;只切换可用状态,保留切回 PSO 时的原选择。 + const bool usePSO = (index == 0); + m_surrogateLabel->setEnabled(usePSO); + m_surrogateCombo->setEnabled(usePSO); +} + void nmWxAutomaticFitting::setupButtons() { QHBoxLayout* buttonLayout = new QHBoxLayout();