#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include "totalTitleBar.h" // #include "geometryutils.h" #include "LogIO.h" #include "WellLogTableDialogNew.h" #include "qtcommonclass.h" #include "PluginName.h" #include "CallManage.h" #include "CallPlugin.h" #include #include #include "fileopenthread.h" //以下参数从配置文件读取 int g_iIndex = 0; int g_iNum = 0; int g_iOneWidth = 200; //道宽 int g_iHeadHigh = 30; //道头高度 int g_iTitleHigh = 303; //道对象高度 int g_iCurveHigh = 3020;//曲线高度 int g_iMove = 12; //道头偏移 int g_iPointNum = 30000; // number of points in graph int g_iLineNum = 0; // number of Line int g_iWidth = 2500; //道宽 // int g_iX1 = -15; int g_iX2 = 15; int g_iY1 = -3000; int g_iY2 = 0; int g_iCanZoom = 0; int g_iScale = 3000; QString g_prjname=""; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //setWindowState(Qt::WindowMaximized);//最大化 // this->setWindowTitle(tr(" 中国石化一体化测井软件平台 LogPlus")); this->setWindowIcon(QIcon(":/qrc/logo.ico")); //加载样式 //loadStyle(":/qrc/qss/lightblue.css"); //loadStyle(":/qrc/qss/blacksoft.css"); loadStyle(":/qrc/qss/flatgray.css"); ReadConfig(); initTitleBar(); //菜单栏 initToolBar(); //工具栏 initProjectView(); //左侧-项目区 初始化在前 initWorkSpaceView(); //中间-工作区 初始化在后 dockLayout(); // this->setStatusBar(::GetStatusBar());//状态栏 //关联信号槽,打开项目 connect(CallManage::getInstance(), SIGNAL(sig_Open()), this, SLOT(s_Open())); //关联信号槽,关闭项目 connect(CallManage::getInstance(), SIGNAL(sig_CloseProject()), this, SLOT(s_CloseProject())); //曲线 //关联信号槽,数据查看 connect(CallManage::getInstance(), SIGNAL(sig_ShowCurve(QString, QString)), this, SLOT(s_ShowCurve(QString, QString))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::ReadConfig() { int iIndex; int iNum; int iOneWidth; int iHeadHigh; int iTitleHigh; int iCurveHigh; int iMove; int iPointNum; int iLineNum; // 1.获取当前运行程序的目录路径 QString applicationDirPath = QCoreApplication::applicationDirPath(); QString configPath; configPath = applicationDirPath + "/config/config.ini"; //从配置文件读取 QtCommonClass *qtCommon = new QtCommonClass(this); qtCommon->readConfigSize(configPath, iIndex, iNum, iOneWidth, iHeadHigh, iTitleHigh, iCurveHigh, iMove, iPointNum, iLineNum); g_iIndex = iIndex; g_iNum = iNum; g_iOneWidth = iOneWidth; //道宽 g_iHeadHigh = iHeadHigh; //道头高度 g_iTitleHigh = iTitleHigh; //道对象高度 g_iCurveHigh = iCurveHigh;//曲线高度 g_iMove = iMove; //道头偏移 g_iPointNum = iPointNum; // number of points in graph g_iLineNum = iLineNum; // number of Line // qtCommon->readXyRange(configPath, g_iX1, g_iX2, g_iY1, g_iY2); } CallManage* MainWindow::getInstanceCallManage() { return CallManage::getInstance(); } void MainWindow::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 MainWindow::initTitleBar() { QMenuBar* m_MenuBar = this->menuBar(); m_MenuBar->setStyleSheet("QMenuBar{font-size: 10.5pt; min-height:28px;}"); // QMenu* m_projectMenu = this->menuBar()->addMenu(tr("工区管理(&F)")); // QMenu* m_dataMenu = this->menuBar()->addMenu(tr("数据管理(&D)")); // QMenu* m_resultMenu = this->menuBar()->addMenu(tr("成果输出(&R)")); // QMenu* m_analyzeToolMenu = this->menuBar()->addMenu(tr("分析工具(&W)")); // QMenu* m_SystemToolMenu = this->menuBar()->addMenu(tr("系统工具(&T)")); // QMenu* m_helpMenu = this->menuBar()->addMenu(tr("帮助(&H)")); } //初始化工具栏 void MainWindow::initToolBar() { QSize toolIconSize(18, 18); ui->mainToolBar->setIconSize(toolIconSize); //设置工具栏图标大小 QIcon newFileIcon(":/image/new.png"); QIcon openFileIcon(":/image/open.png"); QIcon compileIcon(":/image/compile.png"); QIcon runIcon(":/image/capacity.png"); QIcon debugIcon(":/image/anaysis.png"); QIcon grepIcon(":/image/grab.png"); QIcon loadIcon(":/image/export.png"); m_newAc = new QAction(newFileIcon, "新建项目", this); m_openAc = new QAction(openFileIcon, "打开项目", this); m_grepAc = new QAction(grepIcon, "可视解释", this);//启用缩放 m_compileAc = new QAction(compileIcon, "新建道", this); m_runAc = new QAction(runIcon, "保存图像", this); m_debugAc = new QAction(debugIcon, "画图", this); m_loadAc = new QAction(loadIcon, "画线", this); ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //此种方式为文字显示在图标右侧 //add QAction to Widget. ui->mainToolBar->addAction(m_newAc); ui->mainToolBar->addAction(m_openAc); ui->mainToolBar->addAction(m_grepAc); ui->mainToolBar->addAction(m_compileAc); ui->mainToolBar->addAction(m_runAc); ui->mainToolBar->addAction(m_debugAc); ui->mainToolBar->addAction(m_loadAc); connect(m_newAc, &QAction::triggered, this, &MainWindow::s_New); connect(m_openAc, &QAction::triggered, this, &MainWindow::s_Open); connect(m_grepAc, &QAction::triggered, this, &MainWindow::s_showView);//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); } //左侧 void MainWindow::initProjectView() { // if (nullptr == m_projectView) { // m_projectView = new QDockWidget("项目区", this); // m_projectView->setFeatures(QDockWidget::DockWidgetMovable); // | QDockWidget::DockWidgetFloatable QDockWidget::DockWidgetClosable // // 设置标题栏字体颜色 // TotalTitleBar *totalTitleBar = new TotalTitleBar(m_projectView); // totalTitleBar->setAttr(QColor(11, 118, 193), 10, "数据组织与管理树", QColor(255, 255, 255)); // m_projectView->setTitleBarWidget(totalTitleBar); // m_projectWidgets = new QtProjectWidgets(this); // m_projectView->setWidget(m_projectWidgets); // qDebug() << "项目区 id:" << m_projectView->winId() << ", name:" << m_projectView->windowTitle(); // } } //初始化中间区域 void MainWindow::initWorkSpaceView() { if (nullptr == m_stackedWidget_Center) { m_centerWidgets = new CustomTabWidget();//中间工作区 //m_centerWidgets = new MainWindowNew();//中间工作区 m_stackedWidget_Center = new QStackedWidget; m_stackedWidget_Center->addWidget(m_centerWidgets); m_stackedWidget_Center->setWindowTitle("工作区"); // m_stackedWidget_Center->setCurrentWidget(m_centerWidgets);//默认展示 this->setCentralWidget(m_stackedWidget_Center); //---- //MainWindowCurve *mainWindowNew2 = new MainWindowCurve();//中间工作区 //m_centerWidgets->addTab(mainWindowNew2, "解释视图2"); //---- //MainWindowNew *mainWindowNew = new MainWindowNew();//中间工作区 //m_centerWidgets->addTab(mainWindowNew, "解释视图"); // //加载插件显示 // QWidget * pMyWidget = CallPlugin::getInstance()->getPluginWidget(MYUNITPLUGIN, NULL); // if (pMyWidget != nullptr) // { // // // //直方图,获取当前工程下的slf // QVector vecSlfList; // QVector vecWellList; // bool bRet = getAllSlf(g_prjname, vecSlfList, vecWellList); // if(bRet) // { // for(int i=0; iwinId() << ", name:" << m_stackedWidget_Center->windowTitle(); } //停靠 void MainWindow::dockLayout() { //数据组织与管理树 QDockWidget *dock1=new QDockWidget(tr("数据组织与管理树"),this); dock1->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);//QDockWidget::DockWidgetMovable dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); // m_projectWidgets = new QtProjectWidgets(this); dock1->setWidget(m_projectWidgets); addDockWidget(Qt::LeftDockWidgetArea,dock1); //属性编辑器 m_propertyWidget = PropertyService(); m_propertyWidget->setWindowTitle("属性编辑器"); m_propertyWidget->setParent(this); addDockWidget( Qt::LeftDockWidgetArea, m_propertyWidget); //日志输出窗口 m_consoleOutputWidget = ConsoleOutService(); m_consoleOutputWidget->setWindowTitle("输出"); m_consoleOutputWidget->setParent(this); addDockWidget( Qt::LeftDockWidgetArea, m_consoleOutputWidget); tabifyDockWidget(m_consoleOutputWidget, m_propertyWidget); // m_propertyWidget->initWidgetProperty(); } void MainWindow::s_New() { emit CallManage::getInstance()->sig_NewProject(); } void MainWindow::s_Open() { //打开 QString fileFull = ""; fileFull = QFileDialog::getOpenFileName(this, tr("打开项目"), GetProjectFolder(), tr("项目文件(*.wwl)")); if (!fileFull.isEmpty()) { emit CallManage::getInstance()->sig_OpenProject(fileFull); } } //可视解释 void MainWindow::s_showView() { if(g_prjname=="") { QMessageBox::information(nullptr, "提示", "请先打开项目!"); return; } //Logdata QString folderPath; folderPath = GetLogdataPath(); folderPath = folderPath + g_prjname; //folderPath = folderPath + "/multiwell.json"; //打开 QString fileFull = ""; fileFull = QFileDialog::getOpenFileName(this, tr("选择模板"), folderPath, tr("多井图文件(*.json)")); if (fileFull.isEmpty()) { //---- MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 m_centerWidgets->addTab(mainWindowCurve, "解释视图"); return; } QFileInfo fileInfo(fileFull); QString fileName = fileInfo.fileName(); // 获取文件名 //---- MainWindowCurve *mainWindowCurve = new MainWindowCurve();//中间工作区 m_centerWidgets->addTab(mainWindowCurve, fileName); mainWindowCurve->Open(fileFull); //QFuture future = QtConcurrent::run(std::bind(&MainWindowCurve::s_Open, mainWindowCurve, fileFull)); //mainWindowCurve->Open(fileFull); // 创建 FileSearchThread 实例 // FileOpenThread *searchThread = new FileOpenThread(fileFull); // connect(searchThread, &FileOpenThread::sig_NewWell, mainWindowCurve, &MainWindowCurve::s_NewWell, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_NewTrackChangeWidth, mainWindowCurve, &MainWindowCurve::s_NewTrackChangeWidth, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_NewTrack_No_Line, mainWindowCurve, &MainWindowCurve::s_NewTrack_No_Line, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_AddLine_Property, mainWindowCurve, &MainWindowCurve::s_AddLine_Property, Qt::BlockingQueuedConnection); // // 启动搜索线程 // searchThread->start(); // // 创建 FileSearchThread 实例 // FileOpenThread *searchThread = new FileOpenThread(fileFull); // connect(searchThread, &FileOpenThread::sig_NewWell, mainWindowCurve, &MainWindowCurve::s_NewWell);//, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_NewTrackChangeWidth, mainWindowCurve, &MainWindowCurve::s_NewTrackChangeWidth);//, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_NewTrack_No_Line, mainWindowCurve, &MainWindowCurve::s_NewTrack_No_Line);//, Qt::BlockingQueuedConnection); // connect(searchThread, &FileOpenThread::sig_AddLine_Property, mainWindowCurve, &MainWindowCurve::s_AddLine_Property);//, Qt::BlockingQueuedConnection); // searchThread->Open(fileFull); } void MainWindow::s_Risize() { emit CallManage::getInstance()->sig_Risize(); } void MainWindow::s_AddOne() { emit CallManage::getInstance()->sig_AddOne(); } void MainWindow::s_SaveImage() { emit CallManage::getInstance()->sig_SaveImg(); } void MainWindow::s_DrawImg() { emit CallManage::getInstance()->sig_DrawImg(); } void MainWindow::s_DrawLine() { //emit CallManage::getInstance()->sig_DrawLine(); //直方图,获取当前工程下的slf QVector vecSlfList; QVector vecWellList; bool bRet = getAllSlf(g_prjname, vecSlfList, vecWellList); if(bRet) { for(int i=0; i