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();