From c8cdbafc68566b68193bd258af9c11023e228315 Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 5 Jun 2026 17:04:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E4=B8=AD=E5=88=A0=E9=99=A4=E6=9C=80=E5=90=8E=E4=B8=80=E5=8F=A3?= =?UTF-8?q?=E4=BA=95=E5=90=8E=E7=9A=84=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除井对象前清理当前井和参与计算井列表中的失效引用 - 刷新结果井下拉框时跳过已被删除的井名 --- Src/nmNum/nmData/nmDataAnalyzeManager.cpp | 22 ++++++++++++++++++++++ Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp index 07813d5..64390e7 100644 --- a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp +++ b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp @@ -457,6 +457,28 @@ bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData) if(pWellData == nullptr) { return false; } + + const QString removedWellName = pWellData->getWellName(); + const bool isCurrentWell = (m_pCurDataWell == pWellData); + + // 删除井对象前,先移除仍然引用这口井的状态。 + for(int i = m_vecCalculationWells.size() - 1; i >= 0; --i) { + if(m_vecCalculationWells[i].second == removedWellName) { + m_vecCalculationWells.remove(i); + } + } + + // 如果删的是当前井,切换到其他有效井;如果没有,则清空当前井指针。 + if(isCurrentWell) { + m_pCurDataWell = nullptr; + for(int i = 0; i < m_vWellData.size(); ++i) { + nmDataWellBase* pCandidate = m_vWellData[i]; + if(pCandidate != nullptr && pCandidate != pWellData) { + m_pCurDataWell = pCandidate; + break; + } + } + } // 遍历 m_vWellData,找到并移除指定的井对象 for(auto it = m_vWellData.begin(); it != m_vWellData.end(); ++it) { diff --git a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp index d82ecf3..45d4365 100644 --- a/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp +++ b/Src/nmNum/nmSubWxs/nmWxNumericalDesign.cpp @@ -200,6 +200,11 @@ void nmWxNumericalDesign::fillResultWellCombo(const QString& selectedWellName) } } +// 当前井可能已经被删除;如果它已不在结果井下拉框中,就清空这个失效井名。 + if(!sCurrentWellName.isEmpty() && m_pResultWellCombo->findText(sCurrentWellName) < 0) { + sCurrentWellName.clear(); + } + // 未计算时没有结果井列表,先显示当前井,避免下拉框空白。 if(m_pResultWellCombo->count() == 0 && !sCurrentWellName.isEmpty()) { m_pResultWellCombo->addItem(sCurrentWellName);