#include "mainwindowcurve.h" #include "ui_mainwindowcurve.h" #include #include #include "CallManage.h" #include #include "qtcommonclass.h" #include #include #include "newheaddialog.h" //#include "qmytablewidget.h" #include "PropertyWidget.h" #include "LogModuleParamers.h" #include "LogModuleConsole.h" #include "DepPairs.h" extern int g_iOneWidth; //道宽 extern QString g_prjname; // //extern int m_iY1; //extern int m_iY2; extern double g_dPixelPerCm;//每厘米像素数 extern int g_iShow; //显示刻度 //图头 //extern int g_iRows; //extern int g_iCols; //extern int g_iColsWidth; //extern int g_iRowsHight; MainWindowCurve::MainWindowCurve(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindowCurve) { ui->setupUi(this); QtCommonClass *qtCommon = new QtCommonClass(this); m_strUuid = qtCommon->getUUid(); // 设置工具栏的位置,此处设置为在左侧 addToolBar(Qt::LeftToolBarArea, ui->toolBar); addToolBar(Qt::RightToolBarArea, ui->toolBar_2); addToolBar(Qt::RightToolBarArea, ui->toolBar_3); //初始化工具栏 initMainToolBar(); initToolBar(); //校深 initToolBar_2(); ui->toolBar_2->hide(); //拼接 initToolBar_3(); ui->toolBar_3->hide(); //加载样式 loadStyle(":/qrc/qss/flatgray.css"); //------------------------------------- ui->tableWidget->hide(); // //隐藏网格线 // ui->tableWidget->setShowGrid(false); // //设置样式表,不显示竖直边框 // ui->tableWidget->setStyleSheet( "QTableView::item {border-left: 0px solid black;} \ // QTableView::item:selected {border-left: 0px solid black;}\ // QTableView::item {border-right: 0px solid black;} \ // QTableView::item:selected {border-right: 0px solid black;}"); // // // ui->tableWidget->verticalHeader()->hide(); //行 // ui->tableWidget->horizontalHeader()->hide(); //列 // //ui->tableWidget->verticalHeader()->setFixedWidth(3);//标题栏宽度 // //ui->tableWidget->horizontalHeader()->setFixedHeight(3);//标题栏高度 // ui->tableWidget->setColumnCount(1); //动态设置列数 // ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//最后一列铺满最后 // //标题 // QTableWidgetItem *headerItem = new QTableWidgetItem(""); // ui->tableWidget->setHorizontalHeaderItem(0, headerItem); // //我们让一列也可以滑动 // ui->tableWidget->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); // ui->tableWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); // // 设置右键菜单策略 // ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); // connect(ui->tableWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint))); // // 在窗口构造函数中 // //ui->tableWidget->installEventFilter(this); //------------------------------------- //ui->tableWidget_2->setFrameShape(QFrame::NoFrame); //设置无边框 //隐藏网格线 ui->tableWidget_2->setShowGrid(false); //设置样式表,只显示竖直边框 ui->tableWidget_2->setStyleSheet( "QTableView::item {border-left: 1px solid black;} \ QTableView::item:selected {border-left: 1px solid black;}\ QTableView::item {border-right: 1px solid black;} \ QTableView::item:selected {border-right: 1px solid black;}"); ui->tableWidget_2->verticalHeader()->hide(); //行 //ui->tableWidget_2->horizontalHeader()->hide();//列 int rowcount = 2; //总行数 ui->tableWidget_2->setRowCount(rowcount); //动态设置行数 //ui->tableWidget_2->verticalHeader()->setFixedWidth(3);//标题栏宽度 ui->tableWidget_2->horizontalHeader()->setFixedHeight(3);//标题栏高度 //我们让一列也可以滑动 ui->tableWidget_2->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); ui->tableWidget_2->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); connect(ui->tableWidget_2, SIGNAL(itemClicked(QTableWidgetItem*)), this, SLOT(onItemClicked(QTableWidgetItem*))); //------------------------------------- ui->tableWidget_3->hide(); ui->tableWidget_3->verticalHeader()->hide(); ui->tableWidget_3->horizontalHeader()->hide(); connect(this, SIGNAL(sig_NewTrackChangeWidth(QString, int)), this, SLOT(s_NewTrackChangeWidth(QString, int))); //connect(this, SIGNAL(sig_NewWell(QString, QString)), this, SLOT(s_NewWell(QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); connect(CallManage::getInstance(), SIGNAL(sig_changeScale(QString, int)), this, SLOT(s_changeScale(QString, int))); connect(CallManage::getInstance(), SIGNAL(sig_changeDepth(QString, QString, QString, int, int)), this, SLOT(s_changeDepth(QString, QString, QString, int, int))); connect(CallManage::getInstance(), SIGNAL(sig_changeWidth(QString, QString, QString, QString, int, int)), this, SLOT(s_changeWidth(QString, QString, QString, QString, int, int))); connect(CallManage::getInstance(), SIGNAL(sig_changeTrackProperty(QVariantList)), this, SLOT(s_changeTrackProperty(QVariantList))); //曲线选中,置顶 connect(CallManage::getInstance(), SIGNAL(sig_Raise(QString, QString, QString, QString, QString, int, QString)), this, SLOT(s_Raise(QString, QString, QString, QString, QString, int, QString))); //右键--添加分段线 connect(CallManage::getInstance(), SIGNAL(sig_AddShiftLine(QString, double, double)), this, SLOT(s_AddShiftLine(QString, double, double))); //右键--清除当前分段线 connect(CallManage::getInstance(), SIGNAL(sig_DelSelectShiftLine(QString)), this, SLOT(s_DelSelectShiftLine(QString))); //右键--清除全部分段线 connect(CallManage::getInstance(), SIGNAL(sig_DelAllShiftLine(QString)), this, SLOT(s_DelAllShiftLine(QString))); //执行校正 connect(CallManage::getInstance(), SIGNAL(sig_Runcor_List(QString, QList, QList)), this, SLOT(s_Runcor_List(QString, QList, QList))); //执行拼接 connect(CallManage::getInstance(), SIGNAL(sig_Merge_List(QString, QList, QList)), this, SLOT(s_Merge_List(QString, QList, QList))); //执行预览 connect(CallManage::getInstance(), SIGNAL(sig_PreMerge_List(QString, QString, QString, QString, QString, QList, QList)), this, SLOT(s_PreMerge_List(QString, QString, QString, QString, QString, QList, QList))); //执行压缩/拉伸 connect(CallManage::getInstance(), SIGNAL(sig_EShiftDepth(QString, QString, int, QList, QList)), this, SLOT(s_EShiftDepth(QString, QString, int, QList, QList))); //图头---------- m_dock1=new QDockWidget(tr(""),this); m_dock1->setFeatures(QDockWidget::NoDockWidgetFeatures);//QDockWidget::DockWidgetMovable //dock1->setAllowedAreas(Qt::TopDockWidgetArea); // m_formMultiHeads = new FormMultiHeads(this); m_formMultiHeads->m_strHeadOrTail = "Head"; m_dock1->setWidget(m_formMultiHeads); addDockWidget(Qt::TopDockWidgetArea,m_dock1); //移除标题栏 QWidget* lTitleBar = m_dock1->titleBarWidget(); QWidget* lEmptyWidget = new QWidget(); m_dock1->setTitleBarWidget(lEmptyWidget); delete lTitleBar; //隐藏 m_dock1->hide(); //成果表---------- m_dock2=new QDockWidget(tr(""),this); m_dock2->setFeatures(QDockWidget::NoDockWidgetFeatures);//QDockWidget::DockWidgetMovable //dock1->setAllowedAreas(Qt::TopDockWidgetArea); // m_formMultiTails = new FormMultiHeads(this); m_formMultiTails->m_strHeadOrTail = "Tail"; m_dock2->setWidget(m_formMultiTails); addDockWidget(Qt::BottomDockWidgetArea,m_dock2); //移除标题栏 QWidget* lTitleBar_Tails = m_dock2->titleBarWidget(); QWidget* lEmptyWidget_Tails = new QWidget(); m_dock2->setTitleBarWidget(lEmptyWidget_Tails); delete lTitleBar_Tails; //隐藏 m_dock2->hide(); //属性编辑器 // m_propertyWidget = PropertyService(); // m_propertyWidget->setWindowTitle("属性编辑器"); // m_propertyWidget->setParent(this); // addDockWidget( Qt::TopDockWidgetArea, m_propertyWidget); } MainWindowCurve::~MainWindowCurve() { delete ui; } //鼠标滚动,通知可视解释窗口 void MainWindowCurve::s_mouseWheel(QWheelEvent *event) { if (event->angleDelta().y() > 0) { ui->tableWidget_2->verticalScrollBar()->triggerAction(QAbstractSlider::SliderSingleStepSub); // 向下滚动 } else { ui->tableWidget_2->verticalScrollBar()->triggerAction(QAbstractSlider::SliderSingleStepAdd); // 向上滚动 } //verticalScrollBar() horizontalScrollBar() //event->accept(); // 确保事件被处理 } //初始化工具栏 void MainWindowCurve::initMainToolBar() { QSize toolIconSize(18, 18); ui->mainToolBar->setIconSize(toolIconSize); //设置工具栏图标大小 QIcon fixwellsectionHeaderIcon(::GetImagePath()+"icon/fixwellsectionHeader.png"); QIcon currtempliteIcon(::GetImagePath()+"icon/currtemplite.png"); QIcon saveastemplateIcon(::GetImagePath()+"icon/saveastemplate.png"); QIcon executeDepthShiftIcon(::GetImagePath()+"icon/ExecuteDepthShift.png"); QIcon joindepthIcon(::GetImagePath()+"icon/joindepth.png"); QIcon ModuleOpenIcon(::GetImagePath()+"icon/ModuleOne.png"); QIcon openFileIcon(":/image/open.png"); QIcon runIcon(":/image/capacity.png"); QIcon debugIcon(":/image/anaysis.png"); QIcon loadIcon(":/image/export.png"); //Main工具栏 QAction* m_fixwellsectionHeaderAc = nullptr; //锁头 QAction* m_currtempliteAc = nullptr; //加载图文件 QAction* m_saveastemplateAc = nullptr; //另存为图文件 QAction* m_executeDepthShiftAc = nullptr; //校深 QAction* m_joindepthAc = nullptr; //拼接 QAction* m_ModuleOpenAc = nullptr; //处理方法 //QAction* m_openAc = nullptr; //打开 // QAction* m_runAc = nullptr;// // QAction* m_debugAc = nullptr; // // QAction* m_loadAc = nullptr; //加载 m_fixwellsectionHeaderAc = new QAction(fixwellsectionHeaderIcon, "锁头", this); m_currtempliteAc = new QAction(currtempliteIcon, "加载图文件", this); m_saveastemplateAc = new QAction(saveastemplateIcon, "另存为图文件", this); m_executeDepthShiftAc = new QAction(executeDepthShiftIcon, "校深", this); m_joindepthAc = new QAction(joindepthIcon, "拼接", this); m_ModuleOpenAc = new QAction(ModuleOpenIcon, "处理方法", this); // m_runAc = new QAction(runIcon, "设置井", this); // m_debugAc = new QAction(debugIcon, "撤销", this); // m_loadAc = new QAction(loadIcon, "重做", this); //m_openAc = new QAction(openFileIcon, "打开", this); ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //此种方式为文字显示在图标右侧 //add QAction to Widget. ui->mainToolBar->addAction(m_fixwellsectionHeaderAc); ui->mainToolBar->addAction(m_currtempliteAc); ui->mainToolBar->addAction(m_saveastemplateAc); ui->mainToolBar->addAction(m_executeDepthShiftAc); ui->mainToolBar->addAction(m_joindepthAc); ui->mainToolBar->addAction(m_ModuleOpenAc); // ui->mainToolBar->addAction(m_runAc); // ui->mainToolBar->addAction(m_debugAc); // ui->mainToolBar->addAction(m_loadAc); //ui->mainToolBar->addAction(m_openAc); connect(m_fixwellsectionHeaderAc, &QAction::triggered, this, &MainWindowCurve::s_showHeadTable); connect(m_currtempliteAc, &QAction::triggered, this, &MainWindowCurve::s_currtemplite); connect(m_saveastemplateAc, &QAction::triggered, this, &MainWindowCurve::s_Save); connect(m_executeDepthShiftAc, &QAction::triggered, this, &MainWindowCurve::s_ExecuteDepthShift); connect(m_joindepthAc, &QAction::triggered, this, &MainWindowCurve::s_ExecuteMerge); connect(m_ModuleOpenAc, &QAction::triggered, this, &MainWindowCurve::s_ModuleOpen); // connect(m_grepAc, &QAction::triggered, this, &MainWindow::s_Risize); // connect(m_compileAc, &QAction::triggered, this, &MainWindow::s_AddOne); // connect(m_runAc, &QAction::triggered, this, &MainWindow::s_SaveImage); // connect(m_debugAc, &QAction::triggered, this, &MainWindow::s_DrawImg); // connect(m_loadAc, &QAction::triggered, this, &MainWindow::s_DrawLine); //connect(m_openAc, &QAction::triggered, this, &MainWindowCurve::s_Open); } //初始化工具栏 void MainWindowCurve::initToolBar() { QSize toolIconSize(18, 18); ui->toolBar->setIconSize(toolIconSize); //设置工具栏图标大小 QIcon blankTrackIcon(::GetImagePath()+"icon/BlankTrack.png"); QIcon depthIcon(::GetImagePath()+"icon/depth.png"); QIcon logsIcon(::GetImagePath()+"icon/logs.png"); QIcon waveIcon(::GetImagePath()+"icon/wave.png"); QIcon OGResultIcon(::GetImagePath()+"icon/OGResult.png"); QIcon gujingIcon(::GetImagePath()+"icon/gujing.png"); QIcon sidecoreIcon(::GetImagePath()+"icon/sidecore.png"); // QIcon coreIcon(::GetImagePath()+"icon/Core.png"); QIcon mudloggingIcon(::GetImagePath()+"icon/mudlogging.png"); QIcon txtIcon(::GetImagePath()+"icon/txt.png"); QIcon coreimageIcon(::GetImagePath()+"icon/coreimage.png"); QIcon santuyibiaoIcon(::GetImagePath()+"icon/santuyibiao.png"); QIcon crackIcon(::GetImagePath()+"icon/crack.png"); QIcon showdipIcon(::GetImagePath()+"icon/showdip.png"); QIcon pinlvIcon(::GetImagePath()+"icon/pinlv.png"); QIcon ganzhuangtuIcon(::GetImagePath()+"icon/ganzhuangtu.png"); QIcon roseIcon(::GetImagePath()+"icon/rose.png"); QIcon collapseIcon(::GetImagePath()+"icon/collapse.png"); QIcon deviIcon(::GetImagePath()+"icon/devi.png"); QIcon electric_imagingIcon(::GetImagePath()+"icon/electric_imaging.png"); QIcon DCAIcon(::GetImagePath()+"icon/DCA.png"); QIcon GeoSectionIcon(::GetImagePath()+"icon/GeoSection.png"); QIcon jiegutextIcon(::GetImagePath()+"icon/jiegutext.png"); QIcon mcalsIcon(::GetImagePath()+"icon/mcals.png"); QIcon logfaceIcon(::GetImagePath()+"icon/logface.png"); QIcon TubingstringIcon(::GetImagePath()+"icon/Tubingstring.png"); QIcon TDTIcon(::GetImagePath()+"icon/TDT.png"); QIcon LogMudIcon(::GetImagePath()+"icon/LogMud.png"); //工具栏 QAction* m_blankTrackAc = nullptr; QAction* m_depthAc = nullptr; QAction* m_logsAc = nullptr; QAction* m_waveAc = nullptr; QAction* m_OGResultAc = nullptr; QAction* m_gujingAc = nullptr; QAction* m_sidecoreAc = nullptr; // QAction* m_coreAc = nullptr; QAction* m_mudloggingAc = nullptr; QAction* m_txtAc = nullptr; QAction* m_coreimageAc = nullptr; QAction* m_santuyibiaoAc = nullptr; QAction* m_crackAc = nullptr; QAction* m_showdipAc = nullptr; QAction* m_pinlvAc = nullptr; QAction* m_ganzhuangtuAc = nullptr; QAction* m_roseAc = nullptr; QAction* m_collapseAc = nullptr; QAction* m_deviAc = nullptr; QAction* m_electric_imagingAc = nullptr; QAction* m_DCAAc = nullptr; QAction* m_GeoSectionAc = nullptr; QAction* m_jiegutextAc = nullptr; QAction* m_mcalsAc = nullptr; QAction* m_logfaceAc = nullptr; QAction* m_TubingstringAc = nullptr; QAction* m_TDTAc = nullptr; QAction* m_LogMudAc = nullptr; m_blankTrackAc = new QAction(blankTrackIcon, "", this); m_depthAc = new QAction(depthIcon, "", this); m_logsAc = new QAction(logsIcon, "", this); m_waveAc = new QAction(waveIcon, "", this); m_OGResultAc = new QAction(OGResultIcon, "", this); m_gujingAc = new QAction(gujingIcon, "", this); m_sidecoreAc = new QAction(sidecoreIcon, "", this); // m_coreAc = new QAction(coreIcon, "", this); m_mudloggingAc = new QAction(mudloggingIcon, "", this); m_txtAc = new QAction(txtIcon, "", this); m_coreimageAc = new QAction(coreimageIcon, "", this); m_santuyibiaoAc = new QAction(santuyibiaoIcon, "", this); m_crackAc = new QAction(crackIcon, "", this); m_showdipAc = new QAction(showdipIcon, "", this); m_pinlvAc = new QAction(pinlvIcon, "", this); m_ganzhuangtuAc = new QAction(ganzhuangtuIcon, "", this); m_roseAc = new QAction(roseIcon, "", this); m_collapseAc = new QAction(collapseIcon, "", this); m_deviAc = new QAction(deviIcon, "", this); m_electric_imagingAc = new QAction(electric_imagingIcon, "", this); m_DCAAc = new QAction(DCAIcon, "", this); m_GeoSectionAc = new QAction(GeoSectionIcon, "", this); m_jiegutextAc = new QAction(jiegutextIcon, "", this); m_mcalsAc = new QAction(mcalsIcon, "", this); m_logfaceAc = new QAction(logfaceIcon, "", this); m_TubingstringAc = new QAction(TubingstringIcon, "", this); m_TDTAc = new QAction(TDTIcon, "", this); m_LogMudAc = new QAction(LogMudIcon, "", this); m_blankTrackAc->setToolTip("道"); m_depthAc->setToolTip("深度"); m_logsAc->setToolTip("曲线"); m_waveAc->setToolTip("波列"); m_OGResultAc->setToolTip("解释结论道"); m_gujingAc->setToolTip("固井结论道"); m_sidecoreAc->setToolTip("井壁取心"); // m_coreAc->setToolTip("岩心分析"); m_mudloggingAc->setToolTip("录井剖面"); m_txtAc->setToolTip("岩性描述"); m_coreimageAc->setToolTip("岩心照片"); m_santuyibiaoAc->setToolTip("斜井三图一表"); m_crackAc->setToolTip("裂缝"); m_showdipAc->setToolTip("蝌蚪图"); m_pinlvAc->setToolTip("频率统计图"); m_ganzhuangtuAc->setToolTip("杆状图"); m_roseAc->setToolTip("玫瑰图"); m_collapseAc->setToolTip("井眼垮塌矢量图"); m_deviAc->setToolTip("井斜方位图"); m_electric_imagingAc->setToolTip("图像"); m_DCAAc->setToolTip("裂缝DCA分析"); m_GeoSectionAc->setToolTip("地质层位道"); m_jiegutextAc->setToolTip("气测/管柱/文本/FMT/射孔"); m_mcalsAc->setToolTip("多臂井径"); m_logfaceAc->setToolTip("沉积相"); m_TubingstringAc->setToolTip("套管组件"); m_TDTAc->setToolTip("TDT"); m_LogMudAc->setToolTip("LogMud"); //此种方式为文字显示在图标右侧 ui->toolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); //add QAction to Widget. ui->toolBar->addAction(m_blankTrackAc); ui->toolBar->addAction(m_depthAc); ui->toolBar->addAction(m_logsAc); ui->toolBar->addAction(m_waveAc); ui->toolBar->addAction(m_OGResultAc); ui->toolBar->addAction(m_gujingAc); ui->toolBar->addAction(m_sidecoreAc); // ui->toolBar->addAction(m_coreAc); ui->toolBar->addAction(m_mudloggingAc); ui->toolBar->addAction(m_txtAc); ui->toolBar->addAction(m_coreimageAc); ui->toolBar->addAction(m_santuyibiaoAc); ui->toolBar->addAction(m_crackAc); ui->toolBar->addAction(m_showdipAc); ui->toolBar->addAction(m_pinlvAc); ui->toolBar->addAction(m_ganzhuangtuAc); ui->toolBar->addAction(m_roseAc); ui->toolBar->addAction(m_collapseAc); ui->toolBar->addAction(m_deviAc); ui->toolBar->addAction(m_electric_imagingAc); ui->toolBar->addAction(m_DCAAc); ui->toolBar->addAction(m_GeoSectionAc); ui->toolBar->addAction(m_jiegutextAc); ui->toolBar->addAction(m_mcalsAc); ui->toolBar->addAction(m_logfaceAc); ui->toolBar->addAction(m_TubingstringAc); ui->toolBar->addAction(m_TDTAc); ui->toolBar->addAction(m_LogMudAc); connect(m_blankTrackAc, &QAction::triggered, this, &MainWindowCurve::s_NewTrack); connect(m_depthAc, &QAction::triggered, this, &MainWindowCurve::s_NewDepth);//深度 connect(m_logsAc, &QAction::triggered, this, &MainWindowCurve::s_NewLogs);//曲线 connect(m_waveAc, &QAction::triggered, this, &MainWindowCurve::s_NewWave);//波列 connect(m_OGResultAc, &QAction::triggered, this, &MainWindowCurve::s_NewOGResult);//解释结论道 connect(m_gujingAc, &QAction::triggered, this, &MainWindowCurve::s_NewGujing);//固井结论道 connect(m_sidecoreAc, &QAction::triggered, this, &MainWindowCurve::s_NewSideCore);//井壁取心 connect(m_coreAc, &QAction::triggered, this, &MainWindowCurve::s_NewCore);//岩心分析 connect(m_mudloggingAc, &QAction::triggered, this, &MainWindowCurve::s_NewMudlogging);//录井剖面 connect(m_txtAc, &QAction::triggered, this, &MainWindowCurve::s_NewTxt);//岩性描述 connect(m_coreimageAc, &QAction::triggered, this, &MainWindowCurve::s_NewCoreImage);//岩心照片 connect(m_santuyibiaoAc, &QAction::triggered, this, &MainWindowCurve::s_NewSantuyibiao);//斜井三图一表 connect(m_crackAc, &QAction::triggered, this, &MainWindowCurve::s_NewCrack);//裂缝 connect(m_showdipAc, &QAction::triggered, this, &MainWindowCurve::s_NewShowDip);//蝌蚪图 connect(m_pinlvAc, &QAction::triggered, this, &MainWindowCurve::s_pinLvAc);//频率统计图 connect(m_ganzhuangtuAc, &QAction::triggered, this, &MainWindowCurve::s_NewGanZhuangTu);//杆状图 connect(m_roseAc, &QAction::triggered, this, &MainWindowCurve::s_roseAc);//玫瑰图 connect(m_DCAAc, &QAction::triggered, this, &MainWindowCurve::s_dcaAc); connect(m_collapseAc, &QAction::triggered, this, &MainWindowCurve::s_Jykt);//井眼垮塌矢量图 connect(m_deviAc, &QAction::triggered, this, &MainWindowCurve::s_Denv);//井斜方位图 connect(m_electric_imagingAc, &QAction::triggered, this, &MainWindowCurve::s_DrawImage);//图像 connect(m_GeoSectionAc, &QAction::triggered, this, &MainWindowCurve::s_NewGeoSection);//地质层位道 connect(m_jiegutextAc, &QAction::triggered, this, &MainWindowCurve::s_NewJiegutext);//气测/FMT/射孔/文本 connect(m_mcalsAc, &QAction::triggered, this, &MainWindowCurve::s_NewMCals);//多臂井径 connect(m_logfaceAc, &QAction::triggered, this, &MainWindowCurve::s_NewLogface);//沉积相 connect(m_TubingstringAc, &QAction::triggered, this, &MainWindowCurve::s_NewTubingstring);//套管组件 connect(m_TDTAc, &QAction::triggered, this, &MainWindowCurve::s_NewTDT);//TDT } //初始化工具栏 void MainWindowCurve::initToolBar_2() { QSize toolIconSize(26, 26); ui->toolBar_2->setIconSize(toolIconSize); //设置工具栏图标大小 QIcon ShiftIcon(::GetImagePath()+"icon/Shift.png"); QIcon MoveShiftIcon(::GetImagePath()+"icon/MoveShift.png"); QIcon DepthShiftIcon(::GetImagePath()+"icon/DepthShift.png"); QIcon StandardIcon(::GetImagePath()+"icon/Standard.png"); QIcon CorrectionIcon(::GetImagePath()+"icon/Correction.png"); QIcon ShiftotherIcon(::GetImagePath()+"icon/Shiftother.png"); QIcon autocorIcon(::GetImagePath()+"icon/autocor.png"); QIcon runcorIcon(::GetImagePath()+"icon/runcor.png"); QIcon ClearAllSetCurveIcon(::GetImagePath()+"icon/ClearAllSetCurve.png"); QIcon ClearSetCurveIcon(::GetImagePath()+"icon/ClearSetCurve.png"); //工具栏 QAction* m_ShiftAc = nullptr; QAction* m_MoveShiftAc = nullptr; QAction* m_DepthShiftAc = nullptr; QAction* m_StandardAc = nullptr; QAction* m_CorrectionAc = nullptr; QAction* m_ShiftotherAc = nullptr; QAction* m_autocorAc = nullptr; QAction* m_runcorAc = nullptr; QAction* m_ClearAllSetCurveAc = nullptr; QAction* m_ClearSetCurveAc = nullptr; m_ShiftAc = new QAction(ShiftIcon, "", this); m_MoveShiftAc = new QAction(MoveShiftIcon, "", this); m_DepthShiftAc = new QAction(DepthShiftIcon, "", this); m_StandardAc = new QAction(StandardIcon, "", this); m_CorrectionAc = new QAction(CorrectionIcon, "", this); m_ShiftotherAc = new QAction(ShiftotherIcon, "", this); m_autocorAc = new QAction(autocorIcon, "", this); m_runcorAc = new QAction(runcorIcon, "", this); m_ClearAllSetCurveAc = new QAction(ClearAllSetCurveIcon, "", this); m_ClearSetCurveAc = new QAction(ClearSetCurveIcon, "", this); m_ShiftAc->setToolTip("整体深度平移校正"); m_MoveShiftAc->setToolTip("深度分段平移校正"); m_DepthShiftAc->setToolTip("参数卡深度平移校正"); m_StandardAc->setToolTip("设置/取消标准曲线"); m_CorrectionAc->setToolTip("设置/取消校正曲线"); m_ShiftotherAc->setToolTip("批量设置从校正曲线"); m_autocorAc->setToolTip("自动对比"); m_runcorAc->setToolTip("执行校正"); m_ClearAllSetCurveAc->setToolTip("清除全部曲线设置"); m_ClearSetCurveAc->setToolTip("清除全部从曲线设置"); //此种方式为文字显示在图标右侧 ui->toolBar_2->setToolButtonStyle(Qt::ToolButtonIconOnly); //add QAction to Widget. ui->toolBar_2->addAction(m_ShiftAc); ui->toolBar_2->addAction(m_MoveShiftAc); //ui->toolBar_2->addAction(m_DepthShiftAc); ui->toolBar_2->addSeparator(); ui->toolBar_2->addAction(m_StandardAc); ui->toolBar_2->addAction(m_CorrectionAc); //ui->toolBar_2->addAction(m_ShiftotherAc); ui->toolBar_2->addSeparator(); ui->toolBar_2->addAction(m_autocorAc); ui->toolBar_2->addAction(m_runcorAc); ui->toolBar_2->addSeparator(); ui->toolBar_2->addAction(m_ClearAllSetCurveAc); ui->toolBar_2->addAction(m_ClearSetCurveAc); connect(m_ShiftAc, &QAction::triggered, this, &MainWindowCurve::s_Shift); connect(m_MoveShiftAc, &QAction::triggered, this, &MainWindowCurve::s_MoveShift); // connect(m_DepthShiftAc, &QAction::triggered, this, &MainWindowCurve::s_DepthShift); connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard); connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction); // connect(m_ShiftotherAc, &QAction::triggered, this, &MainWindowCurve::s_Shiftother); connect(m_autocorAc, &QAction::triggered, this, &MainWindowCurve::s_autocor); connect(m_runcorAc, &QAction::triggered, this, &MainWindowCurve::s_runcor); connect(m_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve); connect(m_ClearSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearSetCurve); } //初始化工具栏 void MainWindowCurve::initToolBar_3() { QSize toolIconSize(26, 26); ui->toolBar_3->setIconSize(toolIconSize); //设置工具栏图标大小 QIcon StandardIcon(::GetImagePath()+"icon/Standard.png"); QIcon CorrectionIcon(::GetImagePath()+"icon/Correction.png"); QIcon ShiftotherIcon(::GetImagePath()+"icon/Shiftother.png"); QIcon PreMegIcon(::GetImagePath()+"icon/PreMeg.png"); QIcon mergeIcon(::GetImagePath()+"icon/merge.png"); QIcon ClearAllSetCurveIcon(::GetImagePath()+"icon/ClearAllSetCurve.png"); QIcon ClearSetCurveIcon(::GetImagePath()+"icon/ClearSetCurve.png"); //工具栏 QAction* m_StandardAc = nullptr; QAction* m_CorrectionAc = nullptr; QAction* m_ShiftotherAc = nullptr; QAction* m_PreMegAc = nullptr; QAction* m_mergeAc = nullptr; QAction* m_ClearAllSetCurveAc = nullptr; QAction* m_ClearSetCurveAc = nullptr; m_StandardAc = new QAction(StandardIcon, "", this); m_CorrectionAc = new QAction(CorrectionIcon, "", this); m_ShiftotherAc = new QAction(ShiftotherIcon, "", this); m_PreMegAc = new QAction(PreMegIcon, "", this); m_mergeAc = new QAction(mergeIcon, "", this); m_ClearAllSetCurveAc = new QAction(ClearAllSetCurveIcon, "", this); m_ClearSetCurveAc = new QAction(ClearSetCurveIcon, "", this); m_StandardAc->setToolTip("设置/取消目标拼接曲线"); m_CorrectionAc->setToolTip("设置/取消源拼接曲线"); m_ShiftotherAc->setToolTip("批量设置从拼接曲线"); m_PreMegAc->setToolTip("拼接效果预览"); m_mergeAc->setToolTip("执行拼接"); m_ClearAllSetCurveAc->setToolTip("清除全部曲线设置"); m_ClearSetCurveAc->setToolTip("清除全部从曲线设置"); //此种方式为文字显示在图标右侧 ui->toolBar_3->setToolButtonStyle(Qt::ToolButtonIconOnly); //add QAction to Widget. ui->toolBar_3->addAction(m_StandardAc); ui->toolBar_3->addAction(m_CorrectionAc); //ui->toolBar_3->addAction(m_ShiftotherAc); ui->toolBar_3->addSeparator(); ui->toolBar_3->addAction(m_PreMegAc); ui->toolBar_3->addAction(m_mergeAc); ui->toolBar_3->addSeparator(); ui->toolBar_3->addAction(m_ClearAllSetCurveAc); ui->toolBar_3->addAction(m_ClearSetCurveAc); connect(m_StandardAc, &QAction::triggered, this, &MainWindowCurve::s_Standard); connect(m_CorrectionAc, &QAction::triggered, this, &MainWindowCurve::s_Correction); //// connect(m_ShiftotherAc, &QAction::triggered, this, &MainWindowCurve::s_Shiftother); connect(m_PreMegAc, &QAction::triggered, this, &MainWindowCurve::s_PreMegAc); connect(m_mergeAc, &QAction::triggered, this, &MainWindowCurve::s_merge); connect(m_ClearAllSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearAllSetCurve); connect(m_ClearSetCurveAc, &QAction::triggered, this, &MainWindowCurve::s_ClearSetCurve); } QStringList MainWindowCurve::getLineList(QString strWellName, QString strTrackName) { // 创建根对象 QStringList listLine; // int columnCount = ui->tableWidget_2->columnCount();//总列数 for(int i=0; itableWidget_2->cellWidget(1, i) != nullptr ) { auto myWidget = ui->tableWidget_2->cellWidget(1, i); // FormWell *widgetWell = (FormWell*)myWidget;//获得widget if(widgetWell) { QStringList listTemp = widgetWell->getLineList(strWellName, strTrackName); if(listTemp.size()>0) { listLine.append(listTemp); } } } } return listLine; } void MainWindowCurve::ApplyShiftDepth(QString strSlfName, QString strLineName, double DepthOffset) { //1.修改内存数据 if(strSlfName=="") return ; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return ; }; bool isok=0; //TODO 目前对于表格类,参数卡类不支持,会崩溃 int curveindex=logio->FindObjectName((char *)strLineName.toStdString().c_str()); if(curveindex>=0) { CString szBuffer=""; szBuffer=QString::number(DepthOffset,'f',3)+"\r\n"; WriteShiftMessage(*logio,szBuffer,strLineName); logio->CorrectObjectDepth(curveindex, DepthOffset); isok=1; } delete logio; //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, strSlfName, strLineName); } void MainWindowCurve::s_Shift() { if(m_SelectTableItem.m_iTableType==0) { QMessageBox::warning(this, "提示", "请选择要校正的对象!"); return; } if(m_SelectTableItem.m_iTableType==1) { QMessageBox::warning(this, "提示", "该功能不支持对井次校正,如果需要井次校正请到数据树上进行!"); return; } if(m_SelectTableItem.m_iTableType==2 || m_SelectTableItem.m_iTableType==3) { //道,曲线 bool ok=0; double depthshift=QInputDialog::getDouble(NULL,"深度移动","请输入移动的深度量(上移-,下移+)",0.0,-2147483647, 2147483647,4,&ok); if(!ok) return; if(depthshift==0) return; if(depthshift>10) { int flag = QMessageBox::warning(this->parentWidget(),"提示",QString("深度移动量 =")+QString::number(depthshift)+"m\n"+"\n您确定执行校正?", QMessageBox::Yes,QMessageBox::No); if(flag==QMessageBox::No) { return; } } if(m_SelectTableItem.m_iTableType==2) { //道 QStringList listLine = getLineList(m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName); if(listLine.size()>0) { for(int i=0; i=edep&&delta==0) return; if(strSlfName=="") return; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return; } int curveindex=logio->FindObjectName((char*)strLineName.toStdString().c_str()); if(curveindex<0) { delete logio; return; } CString szBuffer=""; if(sdep==edep&&sdep==-9999.0) { szBuffer=QString::number(delta,'f',3)+"\r\n"; WriteShiftMessage(*logio,szBuffer,strLineName); logio->CorrectObjectDepth(curveindex,delta); delete logio; //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, strSlfName, strLineName); return; } curveindex=logio->OpenChannel(strLineName.toStdString().c_str()); if(curveindex>-1) { szBuffer.Format("%10.3f %10.3f %10.3f\r\n",sdep,edep,delta); WriteShiftMessage(*logio,szBuffer,strLineName); logio->MoveDepth(curveindex,sdep,edep,delta); } else { int ObjectType=logio->GetObjectType(strLineName.toStdString().c_str()); float sdeps[2],edeps[2]; sdeps[0]=sdep; edeps[0]=sdep+delta; sdeps[1]=edep; edeps[1]=edep+delta; szBuffer.Format("%10.3f %10.3f\r\n%10.3f %10.3f\r\n",sdeps[0],edeps[0],sdeps[1],edeps[1]); WriteShiftMessage(*logio,szBuffer,strLineName); if(ObjectType >CARD_OBJECT||ObjectType==0) { int index=logio->OpenTable(strLineName.toStdString().c_str()); if(index>-1) { logio->EShiftTableDepth((char*)strLineName.toStdString().c_str(),2,sdeps,edeps); } } else if(ObjectType==CARD_OBJECT) { logio->EshiftStreamDepth((char *)strLineName.toStdString().c_str(),2,sdeps,edeps); } } delete logio; //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, strSlfName, strLineName); } void MainWindowCurve::slotRun() { double depthshift=spinbox3->text().toFloat(); if(depthshift==0) return; float sdep=spinbox1->text().toFloat(); float edep=spinbox2->text().toFloat(); if(sdep>edep) { float depp=sdep; sdep=edep; edep=sdep; } if(m_SelectTableItem.m_iTableType==2) { //道 QStringList listLine = getLineList(m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName); if(listLine.size()>0) { for(int i=0; isetText(toString(((int)(yGeoNormal*10+0.5))/10.0)); } else spinbox1->setText("-9999.0"); form.addRow(value1, spinbox1); value1 = QString("终止深度: "); spinbox2 = new QLineEdit(&dialog); form.addRow(value1, spinbox2); if(1) { spinbox2->setText(toString(-m_iY1)); } else spinbox2->setText("-9999.0"); value1 = QString("移动量(上移-,下移+): "); spinbox3 = new QLineEdit(&dialog); form.addRow(value1, spinbox3); spinbox3->setText("0"); QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog); //m_ButtonBox=&buttonBox; form.addWidget(&buttonBox); //m_LOGS=logs; //QObject::connect(spinbox1, SIGNAL(returnPressed()), this, SLOT(slotSetDep())); //QObject::connect(spinbox2, SIGNAL(returnPressed()), this, SLOT(slotSetDep())); QObject::connect(buttonBox.button(QDialogButtonBox::Ok), SIGNAL(clicked()), this, SLOT(slotRun())); QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); buttonBox.button(QDialogButtonBox::Ok)->setAutoDefault(false); //slotSetDep(); dialog.show(); if (dialog.exec() == QDialog::Accepted) { // Do something here } } } //设置/取消标准(目标拼接)曲线 void MainWindowCurve::s_Standard() { if(m_SelectTableItem.m_iTableType==0) { QMessageBox::warning(this, "提示", "请选择要校正的对象!"); return; } if(m_SelectTableItem.m_iTableType==1) { QMessageBox::warning(this, "提示", "该功能不支持对井次校正,如果需要井次校正请到数据树上进行!"); return; } if(m_SelectTableItem.m_iTableType==3 && m_SelectTableItem.m_strFormInfoType=="curveObject") { //曲线 } else { QMessageBox::warning(this, "提示", "该功能只支持曲线! 请选择要校正的曲线!"); return; } //主校(源拼接)曲线中,去掉本条曲线 if(m_RightCurve.m_strSlfName == m_SelectTableItem.m_strSlfName && m_RightCurve.m_strWellName == m_SelectTableItem.m_strWellName && m_RightCurve.m_strTrackName == m_SelectTableItem.m_strTrackName && m_RightCurve.m_strLineName == m_SelectTableItem.m_strLineName) { //主校曲线中,切换为不选择 m_RightCurve.m_iTableType=0; m_RightCurve.m_strUuid = ""; m_RightCurve.m_strWellName = ""; m_RightCurve.m_strSlfName=""; m_RightCurve.m_strTrackName=""; m_RightCurve.m_strLineName=""; m_RightCurve.m_strFormInfoType=""; } //从校(从拼接)曲线中,去掉本条曲线 for(int i=0; isig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0, m_bMerge); //标准曲线中,切换为不选择 m_LeftCurve.m_iTableType=0; m_LeftCurve.m_strUuid = ""; m_LeftCurve.m_strWellName = ""; m_LeftCurve.m_strSlfName=""; m_LeftCurve.m_strTrackName=""; m_LeftCurve.m_strLineName=""; m_LeftCurve.m_strFormInfoType=""; } else { //修改原来的标准曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, 0, m_bMerge); //修改当前曲线选择状态 iSelect=1标准曲线 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 1, m_bMerge); //设置标准曲线 m_LeftCurve = m_SelectTableItem; } } else { //当前没有标准曲线 //修改当前曲线选择状态 iSelect=1标准曲线 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 1, m_bMerge); //设置标准曲线 m_LeftCurve = m_SelectTableItem; } } //设置/取消校正(源拼接)曲线 void MainWindowCurve::s_Correction() { if(m_SelectTableItem.m_iTableType==0) { QMessageBox::warning(this, "提示", "请选择要校正的对象!"); return; } if(m_SelectTableItem.m_iTableType==1) { QMessageBox::warning(this, "提示", "该功能不支持对井次校正,如果需要井次校正请到数据树上进行!"); return; } if(m_SelectTableItem.m_iTableType==3 && m_SelectTableItem.m_strFormInfoType=="curveObject") { //曲线 } else { QMessageBox::warning(this, "提示", "该功能只支持曲线! 请选择要校正的曲线!"); return; } //标准曲线中,去掉本条曲线 //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { //当前已经选中为标准曲线 if(m_LeftCurve.m_strSlfName == m_SelectTableItem.m_strSlfName && m_LeftCurve.m_strWellName == m_SelectTableItem.m_strWellName && m_LeftCurve.m_strTrackName == m_SelectTableItem.m_strTrackName && m_LeftCurve.m_strLineName == m_SelectTableItem.m_strLineName) { //标准曲线中,切换为不选择 m_LeftCurve.m_iTableType=0; m_LeftCurve.m_strUuid = ""; m_LeftCurve.m_strWellName = ""; m_LeftCurve.m_strSlfName=""; m_LeftCurve.m_strTrackName=""; m_LeftCurve.m_strLineName=""; m_LeftCurve.m_strFormInfoType=""; } } //从校曲线中,去掉本条曲线 for(int i=0; isig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0, m_bMerge); //删除从校曲线 m_ShiftCurves.removeAt(i); return; } } //iSelect=0未知,1标准曲线,2主校曲线,3从校曲线 //当前有主校曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { //当前已经选中为主校曲线 if(m_RightCurve.m_strSlfName == m_SelectTableItem.m_strSlfName && m_RightCurve.m_strWellName == m_SelectTableItem.m_strWellName && m_RightCurve.m_strTrackName == m_SelectTableItem.m_strTrackName && m_RightCurve.m_strLineName == m_SelectTableItem.m_strLineName) { //修改当前曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 0, m_bMerge); //主校曲线中,切换为不选择 m_RightCurve.m_iTableType=0; m_RightCurve.m_strUuid = ""; m_RightCurve.m_strWellName = ""; m_RightCurve.m_strSlfName=""; m_RightCurve.m_strTrackName=""; m_RightCurve.m_strLineName=""; m_RightCurve.m_strFormInfoType=""; } else { //修改当前曲线选择状态 iSelect=3从校曲线 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 3, m_bMerge); //设置从校曲线 m_ShiftCurves.append(m_SelectTableItem); } } else { //当前没有主校曲线 //修改当前曲线选择状态 iSelect=2主校曲线 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_SelectTableItem.m_strSlfName, m_SelectTableItem.m_strWellName, m_SelectTableItem.m_strTrackName, m_SelectTableItem.m_strLineName, 2, m_bMerge); //设置主校曲线 m_RightCurve = m_SelectTableItem; } } // quick sort void qsort(QVector&datx,int left,int right,int idx) { if(rightGetLeftDepth(); do { if(idx==0) { while(datx[i]->GetLeftDepth()GetLeftDepth()>x && j>left ) j--; } else { while(datx[i]->GetLeftDepth()>x && iGetLeftDepth()left ) j--; } if(i<=j) { CurveLine *yy=datx[i]; datx[i]=datx[j]; datx[j]=yy; i++;j--; } } while(i<=j); if(leftsig_AddShifLineToPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, left_Low, right_Hight); } //右键--清除当前分段线 void MainWindowCurve::s_DelSelectShiftLine(QString strUuid) { if(strUuid != m_strUuid) { return; } //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择标准曲线!"); return; } // //当前有主校曲线 // if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") // { // } // else // { // QMessageBox::warning(this, "提示", "请先选择校正曲线!"); // return; // } //通知界面,清除当前分段线 emit CallManage::getInstance()->sig_DelSelectShiftLineFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); } //右键--清除全部分段线 void MainWindowCurve::s_DelAllShiftLine(QString strUuid) { if(strUuid != m_strUuid) { return; } //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择标准曲线!"); return; } // //当前有主校曲线 // if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") // { // } // else // { // QMessageBox::warning(this, "提示", "请先选择校正曲线!"); // return; // } //通知界面,清除全部分段线 emit CallManage::getInstance()->sig_DelAllShiftLineFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); } //自动对比 void MainWindowCurve::s_autocor() { //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择标准曲线!"); return; } //当前有主校曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择校正曲线!"); return; } // static float cmins=0.9; static float winLength=4; static float stepLength=2; static float searchLength=4; static float stdep=-9999; static float endep=-9999; // QDialog dialog(NULL); dialog.setModal(false); Qt::WindowFlags flags = dialog.windowFlags(); flags |= Qt::WindowStaysOnTopHint; flags &= ~Qt::WindowContextHelpButtonHint; dialog.setWindowFlags(flags); dialog.setWindowTitle("自动对比参数"); QFormLayout form(&dialog); form.addRow(new QLabel("输入窗长:")); // Value1 QString value1 = QString("窗长: "); QLineEdit *spinbox1 = new QLineEdit(&dialog); spinbox1->setText(toString(winLength)); form.addRow(value1, spinbox1); value1 = QString("步长: "); QLineEdit *spinbox2 = new QLineEdit(&dialog); form.addRow(value1, spinbox2); spinbox2->setText(toString(stepLength)); value1 = QString("搜索长度: "); QLineEdit *spinbox3 = new QLineEdit(&dialog); form.addRow(value1, spinbox3); spinbox3->setText(toString(searchLength)); value1 = QString("最小相关系数: "); QLineEdit *spinbox4 = new QLineEdit(&dialog); form.addRow(value1, spinbox4); spinbox4->setText(toString(cmins)); value1 = QString("起始深度: "); QLineEdit *spinbox5 = new QLineEdit(&dialog); form.addRow(value1, spinbox5); spinbox5->setText(toString(stdep)); value1 = QString("终止深度: "); QLineEdit *spinbox6 = new QLineEdit(&dialog); form.addRow(value1, spinbox6); spinbox6->setText(toString(endep)); QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog); form.addWidget(&buttonBox); QObject::connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept())); QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); dialog.show(); if (dialog.exec() == QDialog::Accepted) { // Do something here } else return; winLength=spinbox1->text().toFloat(); stepLength=spinbox2->text().toFloat(); searchLength=spinbox3->text().toFloat(); cmins=spinbox4->text().toFloat(); stdep=spinbox5->text().toFloat(); endep=spinbox6->text().toFloat(); // float* FirstDep=new float[5000]; float* SecondDep=new float[5000]; float* corc=new float[5000]; *FirstDep=stdep; *SecondDep=endep; int num=AutoComp((char *)m_LeftCurve.m_strSlfName.toStdString().c_str(), (char *)m_RightCurve.m_strSlfName.toStdString().c_str(), (char *)m_LeftCurve.m_strLineName.toStdString().c_str(), (char *)m_RightCurve.m_strLineName.toStdString().c_str(), cmins, winLength, stepLength, searchLength, FirstDep, SecondDep, corc ); for(int i=0;iSetLeftDepth(FirstDep[i]); pLine->SetRightDepth(SecondDep[i]); m_mergeLineList.append(pLine); } delete FirstDep; delete SecondDep; delete corc; qsort(m_mergeLineList,0,m_mergeLineList.size()-1,0); if(num>0) { CString szBuffer=""; CString szBuffer1=""; for(int i=0;iGetLeftDepth(); float edep=m_mergeLineList[i]->GetRightDepth(); szBuffer1.Format("%g %g\r\n",sdep,edep); szBuffer+=szBuffer1; //通知界面,增加一条校深线段 emit CallManage::getInstance()->sig_AddShifLineToPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, -edep, -sdep); } CMemRdWt mem; if(mem.Open(m_RightCurve.m_strSlfName.toStdString().c_str())) { WriteShiftMessage(mem,szBuffer,"Create depths Pairs:","depth_inp"); } } } //执行校正 void MainWindowCurve::s_runcor() { //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择标准曲线!"); return; } //当前有主校曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择校正曲线!"); return; } //通知界面,执行校正 emit CallManage::getInstance()->sig_RuncorFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); } //编辑曲线,框选拉伸/压缩 void MainWindowCurve::s_EShiftDepth(QString strSlfName, QString strLineName, int count, QList left_Low_List, QList right_Hight_List) { if(strSlfName=="") return; float sdeps[2],edeps[2]; sdeps[0]=right_Hight_List[0]; sdeps[1]=left_Low_List[0]; edeps[0]=right_Hight_List[1]; edeps[1]=left_Low_List[1]; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(strSlfName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return; } int curveindex=logio->FindObjectName((char*)strLineName.toStdString().c_str()); if(curveindex<0) { delete logio; return; } CString szBuffer1=""; CString szBuffer=""; for(int i=0;iEShiftDepth((char*)strLineName.toStdString().c_str(),2, sdeps, edeps); delete logio; //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, strSlfName, strLineName); } //分段线,拉伸/压缩 void MainWindowCurve::s_Runcor_List(QString strUuid, QList left_Low_List, QList right_Hight_List) { if(strUuid != m_strUuid) { return; } //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择标准曲线!"); return; } //当前有主校曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择校正曲线!"); return; } m_mergeLineList.clear(); // int itemCount =left_Low_List.size(); int m_nDepPairsNum=itemCount; QList ShiftCurvesAll; ShiftCurvesAll.append(m_RightCurve); ShiftCurvesAll.append(m_ShiftCurves); if(ShiftCurvesAll.size()<1) return; // for(int i=0;iSetLeftDepth(left_Low_List[i]); pLine->SetRightDepth(right_Hight_List[i]); m_mergeLineList.append(pLine); } qsort(m_mergeLineList,0,m_mergeLineList.size()-1,0); if(itemCount==1) { int flag = QMessageBox::information(NULL,"确认","确认要执行深度平移校正吗?",QMessageBox::Yes,QMessageBox::No); if(flag==QMessageBox::No) return; float m_MoveDep=m_mergeLineList[0]->GetLeftDepth()-m_mergeLineList[0]->GetRightDepth(); for(int i=0;i= 0) { CString szBuffer=""; szBuffer=QString::number(m_MoveDep,'f',3)+"\r\n"; WriteShiftMessage(mem,szBuffer,curve); mem.CorrectObjectDepth(iIndex,m_MoveDep); mem.Close(); //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, Filename1, curve); } else { mem.Close(); } } } return; } else if(itemCount==3) { QMessageBox box(QMessageBox::Warning,"确认","选择校深方式:"); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel); box.setButtonText(QMessageBox::Yes,QString("压缩拉伸")); box.setButtonText (QMessageBox::No,QString("平移")); box.setButtonText (QMessageBox::Cancel,QString("放弃")); int ret=box.exec(); if(ret==QMessageBox::Cancel) return; if(ret==QMessageBox::No) { float sdep=m_mergeLineList[0]->GetLeftDepth(); float edep=m_mergeLineList[2]->GetLeftDepth(); float m_MoveDep=m_mergeLineList[1]->GetLeftDepth()-m_mergeLineList[1]->GetRightDepth(); for(int i=0;i= 0) { Slf_CHANNEL mc; mem.GetChannelInfo(iIndex,&mc); if(m_MoveDep) { CString szBuffer=""; szBuffer.Format("%10.3f %10.3f %10.3f\r\n",sdep,edep,m_MoveDep); WriteShiftMessage(mem,szBuffer,curve); } } mem.Close(); //单条曲线校深 MoveShift(Filename1, curve, sdep, edep, m_MoveDep); //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, Filename1, curve); } } return; } } else { if(m_nDepPairsNum<1) { QMessageBox::warning(this, "提示", "无校正深度线或深度移动量!"); return; } int flag = QMessageBox::information(NULL,"确认","确认要执行深度校正吗?",QMessageBox::Yes,QMessageBox::No); if(flag != QMessageBox::Yes) return; } float m_MoveDep=0; CString szBuffer=""; if(m_nDepPairsNum>0) { CString szBuffer1=""; for(int i=0;iGetLeftDepth(); float edep=m_mergeLineList[i]->GetRightDepth()+m_MoveDep; szBuffer1.Format("%g %g\r\n",sdep,edep); szBuffer+=szBuffer1; } } else if(m_MoveDep) { szBuffer=QString::number(-m_MoveDep,'f',3)+"\r\n"; } for(int i=0;i= 0) { WriteShiftMessage(mem,szBuffer,curve,"depth_inp"); WriteShiftMessage(mem,szBuffer,curve); if(m_MoveDep&&!m_nDepPairsNum) { mem.CorrectObjectDepth(iIndex,-m_MoveDep); } else if(m_nDepPairsNum){ mem.EShiftDepth((char *)curve.toStdString().c_str()); } } mem.Close(); //Plot重新加载数据 emit CallManage::getInstance()->sig_ReloadPlot(m_strUuid, Filename1, curve); } } } //拼接预览 void MainWindowCurve::s_PreMegAc() { //当前有标准(目标)曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择目标曲线!"); return; } //当前有主校(源拼接)曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择源拼接曲线!"); return; } //通知界面,执行预览 emit CallManage::getInstance()->sig_PreMergeFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); } void MainWindowCurve::s_PreMerge_List(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QList left_Low_List, QList right_Hight_List) { if(strUuid != m_strUuid) { return; } //当前有标准(目标)曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "无目标井!"); return; } //当前有主校(源拼接)曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "缺少目标曲线或目标曲线无效!"); return; } m_mergeLineList.clear(); // int pointnum =left_Low_List.size(); // for(int i=0;iSetLeftDepth(left_Low_List[i]); pLine->SetRightDepth(right_Hight_List[i]); m_mergeLineList.append(pLine); } qsort(m_mergeLineList,0,m_mergeLineList.size()-1,0); if(pointnum<1) { QMessageBox::warning(this, "提示", "曲线拼接深度点不存在,无法拼接!请先设置拼接深度点。"); return; } if(pointnum>2) { QMessageBox::warning(this, "提示", "曲线拼接深度点太多,最多可设置2点!请重新设置拼接深度点。"); return; } float SourSdep=0; float SourEdep=0; float DectSdep=0; if(pointnum==1) { QMessageBox box(QMessageBox::Warning,"提示","拼接深度点仅有1个,请您选择拼接部位"); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel); box.setButtonText(QMessageBox::Yes,QString("拼接上段")); box.setButtonText(QMessageBox::No,QString("拼接下段")); box.setButtonText(QMessageBox::Cancel,QString("放弃")); int flag=box.exec();//QMessageBox::information(NULL,"敬告",pwelllog->GetName()+mess,QMessageBox::Yes,QMessageBox::No,QMessageBox::Cancel); double sdep_right = 0; double edep_right = 0; double rlev_right = 0; //获取曲线顶深、底深、间隔 int iRet = GetCurvInfo(m_RightCurve.m_strSlfName, m_RightCurve.m_strLineName, sdep_right, edep_right, rlev_right); if(iRet!=1) { QMessageBox::warning(this, "提示", "曲线深度读取失败,无法拼接!"); return; } if(flag==QMessageBox::Yes) { SourSdep=sdep_right; SourEdep=m_mergeLineList[0]->GetLeftDepth(); DectSdep=SourSdep; } else if(flag==QMessageBox::No) { DectSdep=m_mergeLineList[0]->GetLeftDepth(); SourEdep=edep_right; SourSdep=m_mergeLineList[0]->GetRightDepth(); } else return; } else if(pointnum==2) { SourSdep=m_mergeLineList[0]->GetLeftDepth();//+m_RightCurve->GetShiftOffset(); SourEdep=m_mergeLineList[1]->GetLeftDepth();//+m_RightCurve->GetShiftOffset(); DectSdep=m_mergeLineList[0]->GetLeftDepth(); } //--------------- double sdep_left = 0; double edep_left = 0; double rlev_left = 0; //获取曲线顶深、底深、间隔 int iRet = GetCurvInfo(m_LeftCurve.m_strSlfName, m_LeftCurve.m_strLineName, sdep_left, edep_left, rlev_left); if(iRet!=1) { QMessageBox::warning(this, "提示", "曲线深度读取失败,无法拼接!"); return; } // QList new_DepthList; QList new_ValueList; int size1=(SourEdep-SourSdep)/rlev_left+1.5; if(size1>0) { float dep=0; for(int i=0;isig_PreMerge_FromRightList(m_strUuid, strSlfName, strWellName, strTrackName, strLineName, new_DepthList, new_ValueList); } //执行拼接 void MainWindowCurve::s_merge() { //当前有标准(目标)曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择目标曲线!"); return; } //当前有主校(源拼接)曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "请先选择源拼接曲线!"); return; } //通知界面,执行拼接 emit CallManage::getInstance()->sig_MergeFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); } void MainWindowCurve::s_Merge_List(QString strUuid, QList left_Low_List, QList right_Hight_List) { if(strUuid != m_strUuid) { return; } //当前有标准(目标)曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "无目标井!"); return; } //当前有主校(源拼接)曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { } else { QMessageBox::warning(this, "提示", "缺少目标曲线或目标曲线无效!"); return; } m_mergeLineList.clear(); // int pointnum =left_Low_List.size(); // for(int i=0;iSetLeftDepth(left_Low_List[i]); pLine->SetRightDepth(right_Hight_List[i]); m_mergeLineList.append(pLine); } qsort(m_mergeLineList,0,m_mergeLineList.size()-1,0); if(pointnum<1) { QMessageBox::warning(this, "提示", "曲线拼接深度点不存在,无法拼接!请先设置拼接深度点。"); return; } if(pointnum>2) { QMessageBox::warning(this, "提示", "曲线拼接深度点太多,最多可设置2点!请重新设置拼接深度点。"); return; } float SourSdep=0; float SourEdep=0; float DectSdep=0; if(pointnum==1) { QMessageBox box(QMessageBox::Warning,"提示","拼接深度点仅有1个,请您选择拼接部位"); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel); box.setButtonText(QMessageBox::Yes,QString("拼接上段")); box.setButtonText(QMessageBox::No,QString("拼接下段")); box.setButtonText(QMessageBox::Cancel,QString("放弃")); int flag=box.exec();//QMessageBox::information(NULL,"敬告",pwelllog->GetName()+mess,QMessageBox::Yes,QMessageBox::No,QMessageBox::Cancel); double sdep_right = 0; double edep_right = 0; double rlev_right = 0; //获取曲线顶深、底深、间隔 int iRet = GetCurvInfo(m_RightCurve.m_strSlfName, m_RightCurve.m_strLineName, sdep_right, edep_right, rlev_right); if(iRet!=1) { QMessageBox::warning(this, "提示", "曲线深度读取失败,无法拼接!"); return; } if(flag==QMessageBox::Yes) { SourSdep=sdep_right; SourEdep=m_mergeLineList[0]->GetLeftDepth(); DectSdep=SourSdep; } else if(flag==QMessageBox::No) { DectSdep=m_mergeLineList[0]->GetLeftDepth(); SourEdep=edep_right; SourSdep=m_mergeLineList[0]->GetRightDepth(); } else return; } else if(pointnum==2) { SourSdep=m_mergeLineList[0]->GetLeftDepth();//+m_RightCurve->GetShiftOffset(); SourEdep=m_mergeLineList[1]->GetLeftDepth();//+m_RightCurve->GetShiftOffset(); DectSdep=m_mergeLineList[0]->GetLeftDepth(); } QString name1=m_LeftCurve.m_strLineName; QString name2=m_RightCurve.m_strLineName; QList ShiftCurvesAll; ShiftCurvesAll.append(m_RightCurve); ShiftCurvesAll.append(m_ShiftCurves); if(ShiftCurvesAll.size()<1) { QMessageBox::warning(this, "提示", "缺少目标曲线或目标曲线无效!"); return; } double sdep_left = 0; double edep_left = 0; double rlev_left = 0; //获取曲线顶深、底深、间隔 int iRet = GetCurvInfo(m_LeftCurve.m_strSlfName, m_LeftCurve.m_strLineName, sdep_left, edep_left, rlev_left); if(iRet!=1) { QMessageBox::warning(this, "提示", "曲线深度读取失败,无法拼接!"); return; } int size=(SourEdep-SourSdep)/rlev_left+1.5; QString filename1=m_LeftCurve.m_strSlfName; QString filename2=m_RightCurve.m_strSlfName; CMemRdWt mrw1; CMemRdWt mrw2; struct INC_STRU Inc={0},Inc1={0}; struct INP_STRU Inp,Inp1; struct HD_STRU Hd={99999.0,-99999.0,0}; struct HD_STRU Hd1={99999.0,-99999.0,0}; int flag=0; if(filename1==filename2) { CMemRdWt mrw4; if(mrw4.Open(filename1.toStdString().c_str())) { CMemRdWt mrw3; QDir aa; filename2=::GetLogdataPath()+"temp\\temp001"; aa.remove(filename2); if(mrw3.Open(filename2.toStdString().c_str(),CMemRdWt::modeCreate,1024,1024,0,mrw4.IsWis)) { mrw3.CopyFromFile(mrw4,(char *)name2.toStdString().c_str()); mrw3.Save(); mrw3.Close(); flag=1; } mrw1.Close(); } } if (!mrw1.Open(filename1.toStdString().c_str())) { if(flag) { QDir aa; aa.remove(filename2); } return; } if (!mrw2.Open(filename2.toStdString().c_str())) { mrw1.Close(); if(flag) { QDir aa; aa.remove(filename2); } return; } mrw1.SetStruct(&Inc,NULL,&Inp,NULL,NULL,NULL,&Hd,NULL); mrw2.SetStruct(&Inc1,NULL,&Inp1,NULL,NULL,NULL,&Hd1,NULL); QList names1,names2; names1.append(name1); names2.append(name2); for(int i=0;isig_ReloadPlot(m_strUuid, filename1, name1); //关闭预览框 emit CallManage::getInstance()->sig_PreMerge_Close(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); if(ERRORS.size())QMessageBox::warning(this, "提示", "目标曲线不存在:"+ERRORS.join(" ")); } //清除全部曲线设置 void MainWindowCurve::s_ClearAllSetCurve() { //标准曲线中,去掉本条曲线 //当前有标准曲线 if(m_LeftCurve.m_iTableType==3 && m_LeftCurve.m_strFormInfoType=="curveObject") { //----------------------- //通知界面,清除全部分段线 emit CallManage::getInstance()->sig_DelAllShiftLineFromPlot(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName); //----------------------- //修改当前曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_LeftCurve.m_strSlfName, m_LeftCurve.m_strWellName, m_LeftCurve.m_strTrackName, m_LeftCurve.m_strLineName, 0, m_bMerge); //标准曲线中,切换为不选择 m_LeftCurve.m_iTableType=0; m_LeftCurve.m_strUuid = ""; m_LeftCurve.m_strWellName = ""; m_LeftCurve.m_strSlfName=""; m_LeftCurve.m_strTrackName=""; m_LeftCurve.m_strLineName=""; m_LeftCurve.m_strFormInfoType=""; } //主校曲线中,去掉本条曲线 //当前有主校曲线 if(m_RightCurve.m_iTableType==3 && m_RightCurve.m_strFormInfoType=="curveObject") { //修改当前曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_RightCurve.m_strSlfName, m_RightCurve.m_strWellName, m_RightCurve.m_strTrackName, m_RightCurve.m_strLineName, 0, m_bMerge); //主校曲线中,切换为不选择 m_RightCurve.m_iTableType=0; m_RightCurve.m_strUuid = ""; m_RightCurve.m_strWellName = ""; m_RightCurve.m_strSlfName=""; m_RightCurve.m_strTrackName=""; m_RightCurve.m_strLineName=""; m_RightCurve.m_strFormInfoType=""; } //从校曲线中,去掉本条曲线 for(int i=m_ShiftCurves.size()-1; i>-1; i--) { SelectTableItem m_TempCurve = m_ShiftCurves[i]; //修改当前曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_TempCurve.m_strSlfName, m_TempCurve.m_strWellName, m_TempCurve.m_strTrackName, m_TempCurve.m_strLineName, 0, m_bMerge); //删除从校曲线 m_ShiftCurves.removeAt(i); } } //清除全部从曲线设置 void MainWindowCurve::s_ClearSetCurve() { //从校曲线中,去掉本条曲线 for(int i=m_ShiftCurves.size()-1; i>-1; i--) { SelectTableItem m_TempCurve = m_ShiftCurves[i]; //修改当前曲线选择状态 iSelect=0未知 emit CallManage::getInstance()->sig_ChangeLineStatus(m_strUuid, m_TempCurve.m_strSlfName, m_TempCurve.m_strWellName, m_TempCurve.m_strTrackName, m_TempCurve.m_strLineName, 0, m_bMerge); //删除从校曲线 m_ShiftCurves.removeAt(i); } } QStringList MainWindowCurve::insertCol(int nW) { QStringList sret; int column = -1; QString strSlfName = ""; QString strLeft = m_leftWidgets->getLeftTreeString(); if(strLeft.length() > 0) { QStringList list = strLeft.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { strSlfName = list[0]; QString strWellName = list[1]; // QString strLineName = list[2]; // QString strType = list[3]; if(!m_listWell.contains(strWellName)) { //井没创建,创建井+道+曲线 //新建井 s_NewWell(strWellName, strSlfName); m_listWell.push_back(strWellName); column= 0; } } } if(ui->tableWidget_2->columnCount()==0) { return sret; } int iWidth = 0; if(column < 0) { column = ui->tableWidget_2->currentColumn();//列编号从0开始 iWidth = ui->tableWidget_2->columnWidth(column); } if(column<0) { //当前没有选中井 return sret; } if(column%2==0) { } else { //空白列 return sret; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); sret << strWellName << strSlfName; return sret; } QStringList MainWindowCurve::getSelectWell() { QStringList sret; if(ui->tableWidget_2->columnCount()==0) { return sret; } int column = ui->tableWidget_2->currentColumn();//列编号从0开始 if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return sret; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return sret; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); sret << strWellName << strSlfName; return sret; } void MainWindowCurve::loadStyle(const QString &qssFile) { //加载样式表 QString qss; QFile file(qssFile); if (file.open(QFile::ReadOnly)) { //用QTextStream读取样式文件不用区分文件编码 带bom也行 QStringList list; QTextStream in(&file); //in.setCodec("utf-8"); while (!in.atEnd()) { QString line; in >> line; list << line; } file.close(); qss = list.join("\n"); QString paletteColor = qss.mid(20, 7); this->setPalette(QPalette(paletteColor)); //用时主要在下面这句 this->setStyleSheet(qss); } } void MainWindowCurve::s_currtemplite() { } void MainWindowCurve::s_Save() { //Logdata QString folderPath; folderPath = GetLogdataPath(); folderPath = folderPath + g_prjname; //folderPath = folderPath + "/multiwell.json"; QString exPortPath = QFileDialog::getSaveFileName(this, "另存为", folderPath, "多井图文件(*.json)"); if (exPortPath.isEmpty() == false) { QJsonObject rootObj = makeJson(); // 生成JSON文档 QJsonDocument doc(rootObj); // 写入文件 QFile file(exPortPath); if(file.open(QIODevice::WriteOnly)){ file.write(doc.toJson(QJsonDocument::Indented)); file.close(); qDebug() << "JSON文件写入成功!"; } else { qWarning() << "文件打开失败:" << file.errorString(); return; } } } //校深 void MainWindowCurve::s_ExecuteDepthShift() { //当前正在拼接处理 if(m_bMerge) { //清理拼接线段 s_ClearAllSetCurve(); } m_bMerge = false; ui->toolBar_3->hide(); // if(ui->toolBar_2->isHidden()) { ui->toolBar_2->show(); } else { ui->toolBar_2->hide(); } } //拼接 void MainWindowCurve::s_ExecuteMerge() { //当前正在校深处理 if(!m_bMerge) { //清理校深线段 s_ClearAllSetCurve(); } m_bMerge = true; ui->toolBar_2->hide(); // if(ui->toolBar_3->isHidden()) { ui->toolBar_3->show(); } else { ui->toolBar_3->hide(); } } void MainWindowCurve::s_ModuleOpen() { QString strSlfName = ""; QString strLeft = m_leftWidgets->getLeftTreeString(); if(strLeft.length() > 0) { QStringList list = strLeft.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { strSlfName = list[0]; QString strWellName = list[1]; } } if (strSlfName.isEmpty()) { QMessageBox::information(nullptr, "提示", "请先选中待处理井次"); return; } CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole(); CModuleParamers* pDialog = new CModuleParamers(pModuleConsole);//::CreatParamControlWidget(); SetWorkflowConsole(pModuleConsole); pModuleConsole->g_mModuleParamers = pDialog; pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel(); pDialog->m_CurrentSLFFileName = strSlfName; pDialog->CreatParamControlWidget(); QString subStr = strSlfName; int startPos = strSlfName.indexOf("Logdata"); if (startPos>=0) { subStr = subStr.right(strSlfName.length() - startPos - 7); } pDialog->setWindowTitle(subStr); pDialog->show(); return; } //void MainWindowCurve::s_Open(QString fileFull) //{ //} //显示/隐藏图头 void MainWindowCurve::s_showHeadTable() { if(m_dock1->isVisible()) { m_dock1->hide(); m_dock2->hide(); } else { m_dock1->show(); m_dock2->show(); } // if(ui->tableWidget->isVisible()) // { // ui->tableWidget->hide(); // } // else { // ui->tableWidget->show(); // } // QTableWidget *tableWidget = new QTableWidget(); // tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); // tableWidget->setRowCount(5); // tableWidget->setColumnCount(5); // for(int i=0; i<5; i++) // { // //tableWidget->setColumnWidth(i, 100); // for(int j=0; j<5; j++) // { // QTableWidgetItem* item = new QTableWidgetItem(""); // tableWidget->setItem(i, j, item); // } // } //// QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); // 首选大小策略 //// sizePolicy.setHorizontalStretch(0); // 水平拉伸因子 //// sizePolicy.setVerticalStretch(0); // 垂直拉伸因子 //// tableWidget->setSizePolicy(sizePolicy); // ui->verticalLayout_head->addWidget(tableWidget, 0, Qt::AlignCenter); // 通过布局添加表格 } QJsonObject MainWindowCurve::makeJson() { // 创建根对象 QJsonObject rootObj; // rootObj["prjname"] = g_prjname; rootObj["iScale"] = m_iScale; rootObj["iY1"] = m_iY1; rootObj["iY2"] = m_iY2; // 创建JSON数组并填充数据 QJsonArray subcaseArray; // int columnCount = ui->tableWidget_2->columnCount();//总列数 for(int i=0; itableWidget_2->cellWidget(1, i) != nullptr ) { auto myWidget = ui->tableWidget_2->cellWidget(1, i); // FormWell *widgetWell = qobject_cast(myWidget);//获得widget if(widgetWell) { //options QJsonObject wellObj; wellObj["id"] = i; wellObj["info"] = widgetWell->makeJson(); subcaseArray.append(wellObj); } } } rootObj["wells"]=subcaseArray; //图头 rootObj["heads"]=m_formMultiHeads->makeJson(); //成果表 rootObj["tails"]=m_formMultiTails->makeJson(); return rootObj; } void MainWindowCurve::s_NewWell(QString strWellName, QString strSlfName) { //因为tableWidget需要提前规定好行数与列数 int rowcount = 2; //总行数 int columnCount = ui->tableWidget_2->columnCount();//总列数 if(columnCount==0) { //增加1列 ui->tableWidget_2->setColumnCount(columnCount+1); } else { //增加1列(空白) ui->tableWidget_2->setColumnCount(columnCount+1); //设置列宽 ui->tableWidget_2->setColumnWidth(columnCount, g_iOneWidth); // columnCount = ui->tableWidget_2->columnCount();//总列数 //增加1列 ui->tableWidget_2->setColumnCount(columnCount+1); } //设置列宽 ui->tableWidget_2->setColumnWidth(columnCount, g_iOneWidth); //标题 QTableWidgetItem *headerItem = new QTableWidgetItem(""); ui->tableWidget_2->setHorizontalHeaderItem(columnCount, headerItem); for(int i=0; itableWidget_2->setRowHeight(i, 100); // QTableWidgetItem* item = new QTableWidgetItem(strWellName); item->setData(Qt::UserRole + 1, strSlfName); item->setFlags(item->flags() & (~Qt::ItemIsEditable)); item->setTextAlignment(Qt::AlignCenter); //设置文本居中 ui->tableWidget_2->setItem(i, columnCount, item); } else { double dHight = 0; dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm; if(g_iShow==1) { //显示刻度 dHight = dHight+30; } if(dHight>32767) { dHight = 32767; } dHight = dHight+300+100+10; //设置高度 ui->tableWidget_2->setRowHeight(i, (int)dHight);//8020 // FormWell *widgetWell = new FormWell(this, strWellName); widgetWell->m_iY1 = m_iY1; widgetWell->m_iY2 = m_iY2; widgetWell->m_strUuid = m_strUuid; widgetWell->m_strSlfName = strSlfName; widgetWell->m_iScale = m_iScale; ui->tableWidget_2->setCellWidget(i, columnCount, widgetWell); // m_listWell.push_back(strWellName); } } //ui->tableWidget_2->resizeColumnsToContents(); // 调整列宽以适应内容 // 设置右键菜单策略 // ui->tableWidget_2->setContextMenuPolicy(Qt::CustomContextMenu); // connect(ui->tableWidget_2, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint))); } void MainWindowCurve::mousePressEvent(QMouseEvent *event) { QMainWindow::mousePressEvent(event); // 将事件操作权返回给父类 // 在事件处理中添加一个打印输出,用于显示鼠标在界面上的位置 qDebug()<< "mouse clicked at" << event->pos(); PropertyService()->initWidgetProperty(m_strUuid, m_iScale); //取消所有选中单元格 emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1, ""); } void MainWindowCurve::s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType) { if(m_strUuid == strUuid) { //选中井次 m_SelectTableItem.m_iTableType=iTableType; m_SelectTableItem.m_strUuid = strUuid; m_SelectTableItem.m_strWellName = strWellName; m_SelectTableItem.m_strSlfName=strSlfName; m_SelectTableItem.m_strTrackName=strTrackName; m_SelectTableItem.m_strLineName=strLineName; m_SelectTableItem.m_strFormInfoType=strFormInfoType; //类型:curveObject / waveObject / JiegutextObject } else { m_SelectTableItem.m_iTableType=0; m_SelectTableItem.m_strUuid = ""; m_SelectTableItem.m_strWellName = ""; m_SelectTableItem.m_strSlfName=""; m_SelectTableItem.m_strTrackName=""; m_SelectTableItem.m_strLineName=""; m_SelectTableItem.m_strFormInfoType=""; } if(m_strUuid == strUuid && iTableType==1) { // } else { //选中了曲线置顶 //取消表格选中状态 ui->tableWidget_2->clearSelection(); } } void MainWindowCurve::onItemClicked(QTableWidgetItem* item) { qDebug() << "MainWindowCurve onItemClicked"; //曲线 QString strWellName = item->text(); QString strSlfName = item->data(Qt::UserRole+1).toString(); PropertyService()->initWellProperty(m_strUuid, strSlfName, strWellName, m_iY1, m_iY2); //取消所有选中单元格 emit CallManage::getInstance()->sig_Raise(m_strUuid, "", "", "", "", 1, ""); } void MainWindowCurve::s_NewTrack() { int column = -1; QString strSlfName = ""; //如果视图为空,则根据左侧选中的井来创建空白道 if(ui->tableWidget_2->columnCount()==0) { QString strLeft = m_leftWidgets->getLeftTreeString(); if(strLeft.length() > 0) { QStringList list = strLeft.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { strSlfName = list[0]; QString strWellName = list[1]; // QString strLineName = list[2]; // QString strType = list[3]; if(!m_listWell.contains(strWellName)) { //井没创建,创建井+道+曲线 //新建井 s_NewWell(strWellName, strSlfName); m_listWell.push_back(strWellName); column= 0; } } } //return; } int iWidth = 0; if(column < 0) { column = ui->tableWidget_2->currentColumn();//列编号从0开始 iWidth = ui->tableWidget_2->columnWidth(column); } if(column<0) { //当前没有选中井 return; } if(column%2==0) { } else { //空白列 return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //新建道 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, "", "", ""); //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+g_iOneWidth); } void MainWindowCurve::s_NewDepth() { int column = -1; int nW = 100; QString strSlfName = ""; //如果视图为空,则根据左侧选中的井来创建深度道 if(ui->tableWidget_2->columnCount()==0) { QString strLeft = m_leftWidgets->getLeftTreeString(); if(strLeft.length() > 0) { QStringList list = strLeft.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { strSlfName = list[0]; QString strWellName = list[1]; // QString strLineName = list[2]; // QString strType = list[3]; if(!m_listWell.contains(strWellName)) { //井没创建,创建井+道+曲线 //新建井 s_NewWell(strWellName, strSlfName); m_listWell.push_back(strWellName); column= 0; } } } //return; } int iWidth = 0; if(column < 0) { column = ui->tableWidget_2->currentColumn();//列编号从0开始 iWidth = ui->tableWidget_2->columnWidth(column); } if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 if(strSlfName=="") { strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); } //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); QStringList dt; dt << m_strUuid; dt << strWellName; dt << strSlfName; dt << "深度"; dt << "depthObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); } //曲线 void MainWindowCurve::s_NewLogs() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "AC", "curveObject"); } //波列 void MainWindowCurve::s_NewWave() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "STAIMAGE", "waveObject"); } //解释结论 void MainWindowCurve::s_NewOGResult() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "RESULT", "tableObject"); } //固井结论道 void MainWindowCurve::s_NewGujing() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "GUJING1_RESULT", "tableObject"); } //井壁取心 void MainWindowCurve::s_NewSideCore() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "SWALL_CORE", "tableObject"); } //岩心分析 void MainWindowCurve::s_NewCore() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "CORE_PHYSICS", "tableObject"); } //录井剖面 void MainWindowCurve::s_NewMudlogging() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "GEO_LITH", "tableObject"); } //岩性描述 void MainWindowCurve::s_NewTxt() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "WORDS_RELUST", "tableObject"); } //岩心照片 void MainWindowCurve::s_NewCoreImage() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "IMAGE_DATA", "tableObject"); } //斜井三图一表 void MainWindowCurve::s_NewSantuyibiao() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "Santuyibiao", "SantuyibiaoObject"); } //裂缝 void MainWindowCurve::s_NewCrack() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "FRAC_HOLE.TABLE", "CrackObject"); } //蝌蚪图 void MainWindowCurve::s_NewShowDip() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "FRAC_HOLE.TABLE", "tableObject"); } void MainWindowCurve::s_pinLvAc() { int column = -1; int nW = 160; if(ui->tableWidget_2->columnCount()==0) { return; } int iWidth = 0; if(column < 0) { column = ui->tableWidget_2->currentColumn();//列编号从0开始 iWidth = ui->tableWidget_2->columnWidth(column); } if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); QStringList dt; dt << m_strUuid; dt << strWellName; dt << strSlfName; dt << ""; dt << "plObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); } void MainWindowCurve::s_NewGanZhuangTu() { if(ui->tableWidget_2->columnCount()==0) { return; } int column = ui->tableWidget_2->currentColumn();//列编号从0开始 if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); int iWidth = ui->tableWidget_2->columnWidth(column); int nW = 320; //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); //新建道 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "杆状图", "ganzhuangtuObject", nW); } void MainWindowCurve::s_roseAc() { int nW = 160; QStringList sret = this->insertCol(nW); if(sret.length() <= 0) return; QStringList dt; dt << m_strUuid; dt << sret.at(0); dt << sret.at(1); dt << ""; dt << "roseObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); } void MainWindowCurve::s_dcaAc() { int nW = 180; QStringList sret = this->insertCol(nW); if(sret.length() <= 0) return; QStringList dt; dt << m_strUuid; dt << sret.at(0); dt << sret.at(1); dt << ""; dt << "dcaObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); } //井眼垮塌矢量图 void MainWindowCurve::s_Jykt() { if(ui->tableWidget_2->columnCount()==0) { return; } int column = ui->tableWidget_2->currentColumn();//列编号从0开始 if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); int iWidth = ui->tableWidget_2->columnWidth(column); int nW = 320; //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); //新建道 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "井眼垮塌矢量图", "JyktObject", nW); } //井斜方位图 void MainWindowCurve::s_Denv() { // QString strSlfName = ""; // QString strLeft = m_leftWidgets->getLeftTreeString(); // if(strLeft.length() > 0) // { // QStringList list = strLeft.split("#@@#");//QString字符串分割函数 // if (list.size() > 3) // { // strSlfName = list[0]; // } // } if(ui->tableWidget_2->columnCount()==0) { return; } int column = ui->tableWidget_2->currentColumn();//列编号从0开始 if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); int iWidth = ui->tableWidget_2->columnWidth(column); int nW = 320; //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); //新建道 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "井斜方位图", "DenvObject", nW); } //图像 成图 void MainWindowCurve::s_DrawImage() { // QString strSlfName = ""; // QString strLeft = m_leftWidgets->getLeftTreeString(); // if(strLeft.length() > 0) // { // QStringList list = strLeft.split("#@@#");//QString字符串分割函数 // if (list.size() > 3) // { // strSlfName = list[0]; // } // } if(ui->tableWidget_2->columnCount()==0) { return; } int column = ui->tableWidget_2->currentColumn();//列编号从0开始 if(column<0) { //当前没有选中井 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } if(column%2==0) { } else { //空白列 QMessageBox::warning(this, "提示", "当前没有选中井", "确定"); return; } QString strWellName = ui->tableWidget_2->item(0, column)->text(); //直接从选中的井获取,data记录slf路径 QString strSlfName = ui->tableWidget_2->item(0, column)->data(Qt::UserRole+1).toString(); int iWidth = ui->tableWidget_2->columnWidth(column); int nW = 320; //设置列宽 ui->tableWidget_2->setColumnWidth(column, iWidth+nW+8); //新建道 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "成像", "DrawImageObject", nW); } //地质层位道 void MainWindowCurve::s_NewGeoSection() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "LAYER_DATA", "GeoSectionObject"); } //气测/FMT/射孔/文本 void MainWindowCurve::s_NewJiegutext() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "GASLOG", "JiegutextObject"); } //沉积相 void MainWindowCurve::s_NewLogface() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "LITHA", "LogfaceObject"); } //多臂井径 void MainWindowCurve::s_NewMCals() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "FCA2", "MCalsObject"); } //套管组件 void MainWindowCurve::s_NewTubingstring() { QStringList sret = this->getSelectWell(); if(sret.length() <= 0) return; //新建井+道+曲线(首条) NewWellAndTrack(sret.at(0), sret.at(1), "TUBTOOLS", "TubingstringObject"); } //TDT void MainWindowCurve::s_NewTDT() { int nW = 400; QStringList sret = this->insertCol(nW); if(sret.length() <= 0) return; QStringList dt; dt << m_strUuid; dt << sret.at(0); dt << sret.at(1); dt << ""; dt << "tdtObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); } void MainWindowCurve::s_NewTrackChangeWidth(QString strWellName, int nW) { qDebug() << "MainWindowCurve s_NewTrackChangeWidth"; int column = ui->tableWidget_2->columnCount(); for(int i=0; itableWidget_2->item(0, i)->text(); if(strWellNameTemp==strWellName) { int iWidth = ui->tableWidget_2->columnWidth(i);//设置列宽 if(nW<=0) { ui->tableWidget_2->setColumnWidth(i, iWidth+g_iOneWidth+6); } else { ui->tableWidget_2->setColumnWidth(i, iWidth+nW+6); } } } } //新建空白道,没有曲线 void MainWindowCurve::s_NewTrack_No_Line(QString strWellName, QString strTrackName) { emit CallManage::getInstance()->sig_NewTrack_No_Line(m_strUuid, strWellName, strTrackName); } void MainWindowCurve::s_NewTrack_No_Line(QJsonObject topObj, QJsonObject infoObj) { emit CallManage::getInstance()->sig_NewTrack_No_Line(m_strUuid, topObj, infoObj); } //新建曲线,带属性 void MainWindowCurve::s_AddLine_Property(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale, double newRightScale, QString strScaleType, QColor lineColor, double width, Qt::PenStyle lineStyle) { emit CallManage::getInstance()->sig_AddLine_Property(m_strUuid, strSlfName, strWellName, strTrackName, strLineName, newLeftScale, newRightScale, strScaleType, lineColor, width, lineStyle); } //新建井+道+曲线(首条) void MainWindowCurve::NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName, QString strType) { int nW = 0; if(strType=="SantuyibiaoObject") { //斜井三图一表 nW = g_iOneWidth*4; } // if(m_listWell.contains(strWellName)) { //不在道里,新建道+曲线 //新建道+曲线 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType, nW); //改变井宽 emit sig_NewTrackChangeWidth(strWellName, nW); } else { //井没创建,创建井+道+曲线 //新建井 s_NewWell(strWellName, strSlfName); m_listWell.push_back(strWellName); //新建道+曲线 emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType, nW); } } void MainWindowCurve::dragEnterEvent(QDragEnterEvent* event) { qDebug() << "MainWindowCurve dragEnterEvent"; const QMimeData* mimeData = event->mimeData(); // 检查拖拽的数据类型,确定是否接受拖拽 if (event->mimeData()->hasFormat("text/plain")) { event->acceptProposedAction(); //QApplication::setOverrideCursor(Qt::PointingHandCursor); // 设置鼠标为可添加状态 } else { event->ignore(); //QApplication::setOverrideCursor(Qt::ForbiddenCursor); // 设置鼠标为不可添加状态 } } void MainWindowCurve::dragMoveEvent(QDragMoveEvent* event) { //qDebug() << "MainWindowCurve dragMoveEvent"; // 可以在这里更新鼠标的位置,根据位置判断是否可以放置 // ... //dragEnterEvent(event); // 可以使用相同的逻辑 //event->accept(); } void MainWindowCurve::dropEvent(QDropEvent* event) { qDebug() << "MainWindowCurve dropEvent"; // 处理放置动作,更新UI或数据 if (event->mimeData()->hasFormat("text/plain")) { // 获取拖拽的数据 QString strExtern = event->mimeData()->text(); qDebug() << strExtern; // QStringList list = strExtern.split("#@@#");//QString字符串分割函数 if (list.size() > 3) { QString strSlfName = list[0]; QString strWellName = list[1]; QString strLineName = list[2]; QString strType = list[3]; qDebug() << "strSlfName:" << strSlfName<< " strWellName:" << strWellName << " strLineName:" << strLineName << " strType:" << strType; if(strType=="curveObject" || strType=="waveObject" || strType=="tableObject") { //新建井+道+曲线(首条) NewWellAndTrack(strWellName, strSlfName, strLineName, strType); } } //QMessageBox::information(this, "提示", strExtern); // 接受拖拽事件 event->setDropAction(Qt::MoveAction); event->accept(); } else { // 如果数据格式不正确,不接受拖拽事件 event->ignore(); } // 恢复鼠标光标 //QApplication::restoreOverrideCursor(); } void MainWindowCurve::Open(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("prjname")) { QJsonValue value = object.value("prjname"); if (value.isString()) { strPrjname = value.toString(); qDebug() << "prjname:" << strPrjname; if(strPrjname != g_prjname) { file.close(); qDebug() << "JSON 模板文件项目名称与当前项目不一致!"; return; } } } // if (object.contains("iScale")) { QJsonValue value = object.value("iScale"); if (value.isDouble()) { int iScale = value.toInt(); qDebug() << "iScale:" << QString::number(iScale); // m_iScale = iScale; } } // if (object.contains("iY1")) { QJsonValue value = object.value("iY1"); if (value.isDouble()) { int iY1 = value.toInt(); qDebug() << "iY1:" << QString::number(iY1); // m_iY1 = iY1; } } // if (object.contains("iY2")) { QJsonValue value = object.value("iY2"); if (value.isDouble()) { int iY2 = value.toInt(); qDebug() << "iY2:" << QString::number(iY2); // m_iY2 = iY2; } } // if (object.contains("wells")) { QJsonValue value = object.value("wells"); if (value.isArray()) { wellsArray = value.toArray(); qDebug() << "wellsArray number:" << QString::number(wellsArray.size()); //展示所有井 DisplayWells(wellsArray); } } } } // file.close(); qDebug() << "JSON 模板文件读取成功!"; //触发更新 //QTimer::singleShot(2000, this, SLOT(slot_time())); } else { qWarning() << "JSON 模板文件打开失败:" << file.errorString(); } } //改变道宽 void MainWindowCurve::s_changeWidth(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, int iCurrentCol, int iNewWidth) { int columnCount = ui->tableWidget_2->columnCount();//总列数 for(int i=0; itableWidget_2->cellWidget(1, i) != nullptr ) { auto myWidget = ui->tableWidget_2->cellWidget(1, i); if(myWidget) { // FormWell *widgetWell = (FormWell*)myWidget;//获得widget if(widgetWell) { if(widgetWell->m_strUuid==strUuid && widgetWell->m_strSlfName==strSlfName && widgetWell->m_strWellName==strWellName) { int iWellWidth = widgetWell->setColWidth(iCurrentCol, iNewWidth); //调整井宽 ui->tableWidget_2->setColumnWidth(i, iWellWidth); break; } } } } } } void MainWindowCurve::s_changeTrackProperty(QVariantList vlist) { QString strUuid = vlist.at(0).toString(); QString strSlfName = vlist.at(1).toString(); QString strWellName = vlist.at(2).toString(); int columnCount = ui->tableWidget_2->columnCount();//总列数 for(int i=0; itableWidget_2->cellWidget(1, i) == nullptr ) continue; auto myWidget = ui->tableWidget_2->cellWidget(1, i); if(myWidget == nullptr) continue; // FormWell *widgetWell = qobject_cast(myWidget);//获得widget if(widgetWell == nullptr) continue; if(widgetWell->m_strUuid==strUuid && widgetWell->m_strSlfName==strSlfName && widgetWell->m_strWellName==strWellName) { int iCurrentCol = vlist.at(3).toInt(); QString strProperty = vlist.at(4).toString(); if("道宽(cm)" == strProperty) { int iNewWidth = vlist.at(5).toInt(); int iWellWidth = widgetWell->setColWidth(iCurrentCol, iNewWidth); //调整井宽 ui->tableWidget_2->setColumnWidth(i, iWellWidth); } else if("道名称" == strProperty) { } break; } } } void MainWindowCurve::slot_time() { } //改变缩放比例 void MainWindowCurve::s_changeScale(QString strUuid, int iNewScale) { if(m_strUuid==strUuid) { } else { return; } QProgressBar *progressBar = new QProgressBar(this); progressBar->setGeometry(100, 100, 500, 30); // 设置进度条的位置和大小 progressBar->setMaximum(100); // 设置最大值为100 progressBar->setValue(0); // 初始值设为0 progressBar->show(); m_iScale = iNewScale; double dHight = 0; dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm; if(g_iShow==1) { //显示刻度 dHight = dHight+30; } if(dHight>32767) { dHight = 32767; } double dHightOne = dHight+300+100+10; //设置高度 ui->tableWidget_2->setRowHeight(1, (int)dHightOne);//8020 //-------------------- // int columnCount = ui->tableWidget_2->columnCount();//总列数 int iSplit = 100 / (columnCount/2+1); for(int i=0; isetValue(i*iSplit); // 更新进度条的值 //QCoreApplication::processEvents(); // 让界面更新显示进度条的当前值 if( ui->tableWidget_2->cellWidget(1, i) != nullptr ) { auto myWidget = ui->tableWidget_2->cellWidget(1, i); if(myWidget) { // FormWell *widgetWell = (FormWell*)myWidget;//获得widget if(widgetWell) { widgetWell->m_iScale = iNewScale; widgetWell->setRowHeight(dHight, progressBar, iSplit); } } } } // progressBar->deleteLater(); //update(); } //改变深度 void MainWindowCurve::s_changeDepth(QString strUuid, QString strSlfName, QString strWellName, int iY1, int iY2) { if(m_strUuid==strUuid) { } else { return; } QProgressBar *progressBar = new QProgressBar(this); progressBar->setGeometry(100, 100, 500, 30); // 设置进度条的位置和大小 progressBar->setMaximum(100); // 设置最大值为100 progressBar->setValue(0); // 初始值设为0 progressBar->show(); m_iY1 = iY1; m_iY2 = iY2; double dHight = 0; dHight = (m_iY2-m_iY1)*100.0/(double)m_iScale * g_dPixelPerCm; if(g_iShow==1) { //显示刻度 dHight = dHight+30; } if(dHight>32767) { dHight = 32767; } double dHightMax=0; //-------------------- // int columnCount = ui->tableWidget_2->columnCount();//总列数 int iSplit = 100 / (columnCount/2+1); for(int i=0; isetValue(i*iSplit); // 更新进度条的值 //QCoreApplication::processEvents(); // 让界面更新显示进度条的当前值 if( ui->tableWidget_2->cellWidget(1, i) != nullptr ) { auto myWidget = ui->tableWidget_2->cellWidget(1, i); if(myWidget) { // FormWell *widgetWell = (FormWell*)myWidget;//获得widget if(widgetWell) { if(widgetWell->m_strUuid==strUuid && widgetWell->m_strSlfName==strSlfName && widgetWell->m_strWellName==strWellName) { widgetWell->m_iY1 = iY1; widgetWell->m_iY2 = iY2; widgetWell->setRowHeight(dHight, progressBar, iSplit); //break; } // double temp = widgetWell->m_iY2 - widgetWell->m_iY1; if(dHightMaxtableWidget_2->setRowHeight(1, (int)dHightOne);//8020 // progressBar->deleteLater(); //update(); } void MainWindowCurve::DisplayWells(QJsonArray wellsArray) { QMap mapWells; int id = 0; int iCount = wellsArray.size(); for(int i=0; is_NewWell(strWellName); //s_NewWell(strWellName); } } if (wellObjInfo.contains("SlfName")) { QJsonValue value = wellObjInfo.value("SlfName"); if (value.isString()) { strSlfName = value.toString(); qDebug() << "strSlfName:" << strSlfName; //新建井 //mainWindowCurve->s_NewWell(strWellName); //s_NewWell(strWellName); } } //新建井 QString folderPath = GetLogdataPath(); folderPath = folderPath + g_prjname; strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName; s_NewWell(strWellName, strSlfName); // if (wellObjInfo.contains("formTracks")) { QJsonValue value = wellObjInfo.value("formTracks"); if (value.isArray()) { tracksArray = value.toArray(); qDebug() << "tracksArray number:" << QString::number(tracksArray.size()); //展示所有道 DisplayTracks(tracksArray); } } } //展示所有道 void MainWindowCurve::DisplayTracks(QJsonArray tracksArray) { QMap mapTracks; int id = 0; int iCount = tracksArray.size(); for(int i=0; i0) { QString strWellName = ""; if (trackTop.contains("WellName")) { QJsonValue value = trackTop.value("WellName"); if (value.isString()) { strWellName = value.toString(); qDebug() << "WellName:" << strWellName; } } int nW = 0; if (trackTop.contains("TrackW")) { QJsonValue value = trackTop.value("TrackW"); nW = value.toInt(); } //改变井宽 s_NewTrackChangeWidth(strWellName, nW * static_cast(g_dPixelPerCm)); //mainWindowCurve->s_NewTrackChangeWidth(strWellName); } } //展示其中一道 void MainWindowCurve::DisplayTrack_One(QJsonObject trackObjInfo, QString strTrackName, int nW) { // if (trackObjInfo.contains("formInfos")) { QJsonValue value = trackObjInfo.value("formInfos"); if (value.isArray()) { QJsonArray linesArray = value.toArray(); qDebug() << "linesArray number:" << QString::number(linesArray.size()); //展示所有曲线 DisplayLines(linesArray, strTrackName, nW); } } } //展示所有曲线 void MainWindowCurve::DisplayLines(QJsonArray linesArray, QString strTrackName, int nW) { QMap mapLines; int id = 0; int iCount = linesArray.size(); for(int i=0; iind) ind=ind2; if(ind>-1) { slffilename = strSlfName.mid(ind+1); strSlfName = slffilename; } } } if (lineObjInfo.contains("WellName")) { QJsonValue value = lineObjInfo.value("WellName"); if (value.isString()) { strWellName = value.toString(); //qDebug() << "WellName:" << strWellName; } } // if (lineObjInfo.contains("TrackName")) // { // QJsonValue value = lineObjInfo.value("TrackName"); // if (value.isString()) { // strTrackName = value.toString(); // //qDebug() << "TrackName:" << strTrackName; // } // } if (lineObjInfo.contains("LineName")) { QJsonValue value = lineObjInfo.value("LineName"); if (value.isString()) { strLineName = value.toString(); //qDebug() << "LineName:" << strLineName; } } if (lineObjInfo.contains("vmin")) { QJsonValue value = lineObjInfo.value("vmin"); if (value.isDouble()) { newLeftScale = value.toDouble(); //qDebug() << "vmin:" << QString::number(newLeftScale); } } if (lineObjInfo.contains("vmax")) { QJsonValue value = lineObjInfo.value("vmax"); if (value.isDouble()) { newRightScale = value.toDouble(); //qDebug() << "vmax:" << QString::number(newRightScale); } } if (lineObjInfo.contains("ScaleType")) { QJsonValue value = lineObjInfo.value("ScaleType"); if (value.isString()) { strScaleType = value.toString(); //qDebug() << "ScaleType:" << strScaleType; } } if (lineObjInfo.contains("Width")) { QJsonValue value = lineObjInfo.value("Width"); if (value.isDouble()) { width = value.toDouble(); //qDebug() << "Width:" << QString::number(width); } } if (lineObjInfo.contains("lineStyle")) { QJsonValue value = lineObjInfo.value("lineStyle"); if (value.isDouble()) { lineStyle = (Qt::PenStyle)value.toInt(); //qDebug() << "lineStyle:" << QString::number(lineStyle); } } // if (lineObjInfo.contains("lineColor")) { lineColor.setNamedColor(lineObjInfo.value("lineColor").toString()); } QString folderPath = GetLogdataPath(); folderPath = folderPath + g_prjname; strSlfName = folderPath + "/" + "#" + strWellName + "/" + strSlfName; if(strLineName!="") { //新建曲线 s_AddLine_Property(strSlfName, strWellName, strTrackName, strLineName, newLeftScale, newRightScale, strScaleType, lineColor, width, lineStyle); } //--------------- if (lineObjInfo.contains("newHeadFill")) { QJsonValue value = lineObjInfo.value("newHeadFill"); if (value.isString()) { newHeadFill = value.toString(); //qDebug() << "newHeadFill:" << newHeadFill; } } if (lineObjInfo.contains("newTargetLine")) { QJsonValue value = lineObjInfo.value("newTargetLine"); if (value.isString()) { newTargetLine = value.toString(); //qDebug() << "newTargetLine:" << newTargetLine; } } if (lineObjInfo.contains("newFillType")) { QJsonValue value = lineObjInfo.value("newFillType"); if (value.isString()) { newFillType = value.toString(); //qDebug() << "newFillType:" << newFillType; } } if (lineObjInfo.contains("newFillMode")) { QJsonValue value = lineObjInfo.value("newFillMode"); if (value.isString()) { newFillMode = value.toString(); //qDebug() << "newFillMode:" << newFillMode; } } // if (lineObjInfo.contains("newColor")) { newColor.setNamedColor(lineObjInfo.value("newColor").toString()); } if (lineObjInfo.contains("newLithosImage")) { QJsonValue value = lineObjInfo.value("newLithosImage"); if (value.isString()) { newLithosImage = value.toString(); //qDebug() << "newLithosImage:" << newLithosImage; } } if (lineObjInfo.contains("new_vMin")) { QJsonValue value = lineObjInfo.value("new_vMin"); if (value.isDouble()) { new_vMin = value.toDouble(); //qDebug() << "new_vMin:" << QString::number(new_vMin); } } if (lineObjInfo.contains("new_vMax")) { QJsonValue value = lineObjInfo.value("new_vMax"); if (value.isDouble()) { new_vMax = value.toDouble(); //qDebug() << "new_vMax:" << QString::number(new_vMax); } } // if (lineObjInfo.contains("frontColor")) { frontColor.setNamedColor(lineObjInfo.value("frontColor").toString()); } // if (lineObjInfo.contains("backColor")) { backColor.setNamedColor(lineObjInfo.value("backColor").toString()); } // if(newFillMode=="无填充") { //emit CallManage::getInstance()->sig_ClearFillMode(m_strUuid, strSlfName, strWellName, strTrackName, strLineName); } else //if(newFillMode=="填充") { //模板不立刻填充,bFillNow=false emit CallManage::getInstance()->sig_ChangeFillMode(m_strUuid, strSlfName, strWellName, strTrackName, strLineName, newFillType, newTargetLine, newColor, newLithosImage, newHeadFill, new_vMin, new_vMax, strOtherScaleType, frontColor, backColor, newFillMode, false); } } void MainWindowCurve::DisplayType_One(QJsonObject lineObjInfo, QString strTrackName, int nW) { nW = nW * static_cast(g_dPixelPerCm); QStringList sret = this->insertCol(nW); if(sret.length() <= 0) return; QStringList dt; dt << m_strUuid; dt << sret.at(0); dt << sret.at(1); dt << ""; dt << "roseObject"; dt << QString::number(nW); //新建道 emit CallManage::getInstance()->sig_NewCol(dt); }