From 99c19344b550c4c590636482de2372e34b6f46f3 Mon Sep 17 00:00:00 2001 From: jiayulong Date: Tue, 2 Jun 2026 21:55:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A6=E4=BE=A7=E6=A0=91=E5=9B=BE=EF=BC=8C?= =?UTF-8?q?=E6=8B=96=E6=8B=BD=E4=BA=95=E6=AC=A1=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?json=E6=A8=A1=E6=9D=BF=E7=94=9F=E6=88=90=E5=A4=9A=E4=BA=95?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logPlus/CallManage.h | 3 ++ logPlus/formdraw.cpp | 15 ++++++- logPlus/forminfo.cpp | 15 ++++++- logPlus/formtracktop.cpp | 15 ++++++- logPlus/mainwindowcurve.cpp | 84 +++++++++++++++++++++++++++++++++++++ logPlus/mainwindowcurve.h | 6 ++- logPlus/preqtablewidget.cpp | 15 ++++++- logPlus/qmytreewidget.cpp | 9 +++- 8 files changed, 151 insertions(+), 11 deletions(-) diff --git a/logPlus/CallManage.h b/logPlus/CallManage.h index 975ef17..502e991 100644 --- a/logPlus/CallManage.h +++ b/logPlus/CallManage.h @@ -106,6 +106,9 @@ signals: //LogMud void sig_AddLogMud(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW = 0); + //拖拽井次,生成多井 + void sig_AddMultiWell(QString strUuid, QString strSlfName, QString strWellName); + //新建波列 void sig_AddWave(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strWaveName); //删除波列 diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index 952dc05..50f2239 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -7484,8 +7484,19 @@ void FormDraw::dropEvent(QDropEvent* event) } else { - // 如果井名不正确,不接受拖拽事件 - event->ignore(); + if(strType=="wellItem")//井次名称对应多井,统一处理 + { + //拖拽井次,生成多井 + emit CallManage::getInstance()->sig_AddMultiWell(m_strUuid, strSlfName, strWellName); + // 接受拖拽事件 + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + { + // 如果井名不正确,不接受拖拽事件 + event->ignore(); + } } } else diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index 4a117f5..6a8c619 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -2508,8 +2508,19 @@ void FormInfo::dropEvent(QDropEvent* event) } else { - // 如果井名不正确,不接受拖拽事件 - event->ignore(); + if(strType=="wellItem")//井次名称对应多井,统一处理 + { + //拖拽井次,生成多井 + emit CallManage::getInstance()->sig_AddMultiWell(m_strUuid, strSlfName, strWellName); + // 接受拖拽事件 + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + { + // 如果井名不正确,不接受拖拽事件 + event->ignore(); + } } } else diff --git a/logPlus/formtracktop.cpp b/logPlus/formtracktop.cpp index f37bd84..a0b45b5 100644 --- a/logPlus/formtracktop.cpp +++ b/logPlus/formtracktop.cpp @@ -271,8 +271,19 @@ void FormTrackTop::dropEvent(QDropEvent* event) } else { - // 如果井名不正确,不接受拖拽事件 - event->ignore(); + if(strType=="wellItem")//井次名称对应多井,统一处理 + { + //拖拽井次,生成多井 + emit CallManage::getInstance()->sig_AddMultiWell(m_strUuid, strSlfName, strWellName); + // 接受拖拽事件 + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + { + // 如果井名不正确,不接受拖拽事件 + event->ignore(); + } } } else diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index dd606a7..eee23cd 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -188,6 +188,8 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) : //重新设置滚动条范围(头) connect(CallManage::getInstance(), SIGNAL(sig_setRangeVScrollBar2(QString)), this, SLOT(s_setRangeVScrollBar2(QString))); + connect(CallManage::getInstance(), SIGNAL(sig_AddMultiWell(QString, QString, QString)), this, SLOT(s_AddMultiWell(QString, QString, QString))); + //图头---------- m_dock1=new QDockWidget(tr(""),this); m_dock1->setFeatures(QDockWidget::NoDockWidgetFeatures);//QDockWidget::DockWidgetMovable @@ -5271,6 +5273,11 @@ void MainWindowCurve::dropEvent(QDropEvent* event) //新建井+道+曲线(首条) NewWellAndTrack(strWellName, strSlfName, strLineName, strType); } + else if(strType=="wellItem")//井次名称对应多井,统一处理 + { + //拖拽井次,生成多井 + emit CallManage::getInstance()->sig_AddMultiWell(m_strUuid, strSlfName, strWellName); + } } //QMessageBox::information(this, "提示", strExtern); @@ -5421,6 +5428,62 @@ void MainWindowCurve::Open(QString fileFull) } } +void MainWindowCurve::OpenMultiWell(QString fileFull) +{ + QString strPrjname = ""; + QJsonArray wellsArray; + + QJsonParseError jsonError; + // 文件 + QFile file(fileFull); + if(file.open(QIODevice::ReadOnly)) + { + // 解析JSON + QJsonDocument document = QJsonDocument::fromJson(file.readAll(), &jsonError); + if (!document.isNull() && (jsonError.error == QJsonParseError::NoError)) + { + if (document.isObject()) + { + QJsonObject object = document.object(); + // + if (object.contains("wells")) + { + QJsonValue value = object.value("wells"); + if (value.isArray()) { + wellsArray = value.toArray(); + qDebug() << "wellsArray number:" << QString::number(wellsArray.size()); + + //是否正在加载json + g_iLoadingJson = 1; + //展示所有井 + DisplayWells(wellsArray); + g_iLoadingJson = 0; + + //统一处理头部滚动条 + s_setRangeVScrollBar2(m_strUuid); + } + } + } + } + + // + file.close(); + qDebug() << "JSON 模板文件读取成功!"; + + //重置右侧滚动条 +// ui->verticalScrollBar->setRange(-m_iY2*100, -m_iY1*100); +// ui->verticalScrollBar->setValue(-m_iY2*100); + vertScrollBarChanged(-m_iY2*100); + + QMessageBox::information(NULL,"提示","模板加载完成!",QMessageBox::Ok); + emit sig_resizeWindow(); + + } else { + qWarning() << "JSON 模板文件打开失败:" << file.errorString(); + QMessageBox::information(NULL,"提示","模板加载失败!",QMessageBox::Ok); + } +} + //改变道宽 void MainWindowCurve::s_changeWidth(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, int iCurrentCol, int iNewWidth) { @@ -6610,3 +6673,24 @@ void MainWindowCurve::onSectionResized(int logicalIndex, int oldSize, int newSiz //居中 emit sig_resizeWindow(); } + +//拖拽井次,生成多井 +void MainWindowCurve::s_AddMultiWell(QString strUuid, QString strSlfName, QString strWellName) +{ + if(strUuid != m_strUuid) + { + return; + } + if(m_fileJson=="") + { + return; + } + + g_strSlfName = strSlfName; + g_strWellName = strWellName; + //多井的打开工程,使用模板的井名和slf名 + m_bMultiProject = false; + + // + OpenMultiWell(m_fileJson); +} diff --git a/logPlus/mainwindowcurve.h b/logPlus/mainwindowcurve.h index 02b9390..8cd14c4 100644 --- a/logPlus/mainwindowcurve.h +++ b/logPlus/mainwindowcurve.h @@ -142,7 +142,8 @@ public: void DisplayTrack_Top(int id, QJsonObject trackTop, QJsonObject trackInfo); void Open(QString fileFull);//打开 - QString m_fileJson; + void OpenMultiWell(QString fileFull);//打开 + QString m_fileJson=""; bool m_bMultiProject = false; //多井的打开工程,使用模板的井名和slf名 public: @@ -233,6 +234,9 @@ public slots: //列宽改变 void onSectionResized(int logicalIndex, int oldSize, int newSize); + //拖拽井次,生成多井 + void s_AddMultiWell(QString strUuid, QString strSlfName, QString strWellName); + public: QAction* m_selectWellAc = nullptr; //选择井 QAction* m_fixwellsectionHeaderAc = nullptr; //锁头 diff --git a/logPlus/preqtablewidget.cpp b/logPlus/preqtablewidget.cpp index 3feb147..aa71052 100644 --- a/logPlus/preqtablewidget.cpp +++ b/logPlus/preqtablewidget.cpp @@ -377,8 +377,19 @@ void PreQTableWidget::dropEvent(QDropEvent *event) } else { - // 如果井名不正确,不接受拖拽事件 - event->ignore(); + if(strType=="wellItem")//井次名称对应多井,统一处理 + { + //拖拽井次,生成多井 + emit CallManage::getInstance()->sig_AddMultiWell(m_strUuid, strSlfName, strWellName); + // 接受拖拽事件 + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + { + // 如果井名不正确,不接受拖拽事件 + event->ignore(); + } } } } diff --git a/logPlus/qmytreewidget.cpp b/logPlus/qmytreewidget.cpp index 310d8cd..f96d60e 100644 --- a/logPlus/qmytreewidget.cpp +++ b/logPlus/qmytreewidget.cpp @@ -145,11 +145,16 @@ void QMyTreeWidget::startDrag(Qt::DropActions supportedActions) { //根节点(项目名称) } - else if (strTreeTag == "curveObject" || strTreeTag == "waveObject" || strTreeTag == "tableObject"){ + else if (strTreeTag == "curveObject" || strTreeTag == "waveObject" || strTreeTag == "tableObject" || + strTreeTag == "wellItem")//井次名称对应多井,统一处理 + { //曲线 QString strSlfName = item->data(0, Qt::UserRole+1).toString(); QString strWellName = item->data(0, Qt::UserRole+2).toString(); - + if (strTreeTag == "wellItem")//井次名称 + { + strWellName = item->text(0); + } //曲线对象(AC、BS...) QMimeData *mimeData = new QMimeData; // 这里需要根据你的item数据来设置mimeData,例如: