Merge branch 'feature/UI-20260528' of http://1.92.128.200:3000/YXS/nmWTAI-Platform into feature/UI-20260528

feature/UI-20260528
lvjunjie 6 days ago
commit 0cec2ca256

@ -458,6 +458,28 @@ bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
return false; 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找到并移除指定的井对象 // 遍历 m_vWellData找到并移除指定的井对象
for(auto it = m_vWellData.begin(); it != m_vWellData.end(); ++it) { for(auto it = m_vWellData.begin(); it != m_vWellData.end(); ++it) {
if(*it == pWellData) { if(*it == pWellData) {
@ -474,6 +496,16 @@ bool nmDataAnalyzeManager::removeWell(nmDataWellBase* pWellData)
void nmDataAnalyzeManager::removeWellDataAndPlot(nmDataWellBase* pWellData) void nmDataAnalyzeManager::removeWellDataAndPlot(nmDataWellBase* pWellData)
{ {
// 参数校验
if(pWellData == nullptr) {
return;
}
// 公共删井入口中不允许删除当前井,避免活动井引用失效
if(pWellData == getCurWellData()) {
return;
}
nmDataPlotContextProvider* pPlotContextProvider = nmDataPlotContext::provider(); nmDataPlotContextProvider* pPlotContextProvider = nmDataPlotContext::provider();
if (m_pNmGuiPlot != nullptr && pPlotContextProvider != nullptr) if (m_pNmGuiPlot != nullptr && pPlotContextProvider != nullptr)
{ {

@ -44,6 +44,7 @@
#include "nmObjRegion.h" #include "nmObjRegion.h"
#include "nmObjDeleteTool.h" #include "nmObjDeleteTool.h"
#include "nmDataAnalyzeManager.h" #include "nmDataAnalyzeManager.h"
@ -53,6 +54,7 @@
#include "ZxDataGaugeP.h" #include "ZxDataGaugeP.h"
#include "ZxDataGaugeF.h" #include "ZxDataGaugeF.h"
#include <QWidget> #include <QWidget>
nmGuiPlot::nmGuiPlot(bool bUseBtns, QWidget *parent) : nmGuiPlot::nmGuiPlot(bool bUseBtns, QWidget *parent) :
@ -74,6 +76,7 @@ nmGuiPlot::nmGuiPlot(bool bUseBtns, QWidget *parent) :
setWindowTitle(tr("nmGuiPlot")); setWindowTitle(tr("nmGuiPlot"));
m_iRegionMarkCount = 0; m_iRegionMarkCount = 0;
} }
nmGuiPlot::~nmGuiPlot() nmGuiPlot::~nmGuiPlot()
@ -885,6 +888,11 @@ void nmGuiPlot::slotDeleteWell(QString wellID)
return; return;
} }
// 当前井作为活动分析井保留,不允许从地图中直接删除
if(obj->getNmWellData() == nmDataAnalyzeManager::getCurrentInstance()->getCurWellData()) {
return;
}
// // 创建一个QTimer对象 // // 创建一个QTimer对象
// QTimer* timer = new QTimer(); // QTimer* timer = new QTimer();
// // 创建一个要执行的单次任务 // // 创建一个要执行的单次任务
@ -1324,6 +1332,30 @@ void nmGuiPlot::slotDeleteOneObj(QString sName, void* obj)
} }
if(sName != NULL) { if(sName != NULL) {
// 删除前先校验目标对象。
// 如果目标不存在,或目标井就是当前活动井,则结束删除工具并直接返回,
// 避免当前井被从地图上删除,同时保证界面退出删除状态。
nmObjDeleteTool* pDeleteTool = static_cast<nmObjDeleteTool*>(obj);
nmObjBase* nmObj = dynamic_cast<nmObjBase*>(m_pPlot->getObjByName(sName));
if(nmObj == nullptr) {
if(pDeleteTool) {
m_pPlot->removeTools(pDeleteTool);
}
return;
}
if(nmObjPointWell* pWellObj = dynamic_cast<nmObjPointWell*>(nmObj)) {
nmDataWellBase* pCurWell = nmDataAnalyzeManager::getCurrentInstance()->getCurWellData();
if(pWellObj->getNmWellData() == pCurWell) {
if(pDeleteTool) {
m_pPlot->removeTools(pDeleteTool);
}
return;
}
}
nmPlotDialogContextProvider* pDialogProvider = nmPlotDialogContext::provider(); nmPlotDialogContextProvider* pDialogProvider = nmPlotDialogContext::provider();
if(pDialogProvider != nullptr && pDialogProvider->confirmDeleteObject()) { if(pDialogProvider != nullptr && pDialogProvider->confirmDeleteObject()) {

@ -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()) { if(m_pResultWellCombo->count() == 0 && !sCurrentWellName.isEmpty()) {
m_pResultWellCombo->addItem(sCurrentWellName); m_pResultWellCombo->addItem(sCurrentWellName);

Loading…
Cancel
Save