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