logplus/logPlus/mainwindow.cpp
2025-10-29 17:23:30 +08:00

396 lines
12 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSplitter>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include "totalTitleBar.h"
//
#include "geometryutils.h"
#include "LogIO.h"
#include "WellLogTableDialogNew.h"
#include "qtcommonclass.h"
#include "PluginName.h"
#include "CallManage.h"
#include "CallPlugin.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");
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);
}
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_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<QString> vecSlfList;
QVector<QString> vecWellList;
bool bRet = getAllSlf(g_prjname, vecSlfList, vecWellList);
if(bRet)
{
for(int i=0; i<vecWellList.size(); i++)
{
qDebug() << "vecWellList:" << QString::number(i+1) << "=" << vecWellList[i];
}
for(int i=0; i<vecSlfList.size(); i++)
{
qDebug() << "vecSlfList:" << QString::number(i+1) << "=" << vecSlfList[i];
}
}
//关联信号槽数据传递vecSlfList, vecWellList
//...
//关联信号槽,数据查看
connect(CallManage::getInstance(), SIGNAL(sig_testPlugin(QString)), pMyWidget, SLOT(s_testPlugin(QString)));
//
m_centerWidgets->addTab(pMyWidget, "插件视图");
}
}
qDebug() << "工作区 id:" << m_stackedWidget_Center->winId() << ", 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_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<QString> vecSlfList;
QVector<QString> vecWellList;
bool bRet = getAllSlf(g_prjname, vecSlfList, vecWellList);
if(bRet)
{
for(int i=0; i<vecWellList.size(); i++)
{
qDebug() << "vecWellList:" << QString::number(i+1) << "=" << vecWellList[i];
}
for(int i=0; i<vecSlfList.size(); i++)
{
qDebug() << "vecSlfList:" << QString::number(i+1) << "=" << vecSlfList[i];
}
}
}
void MainWindow::s_CloseProject()
{
// if(m_centerWidgets)
// {
// int iCount = m_centerWidgets->count();
// for(int i=0; i<iCount; i++)
// {
// m_centerWidgets->removeTab(0);
// }
// }
}
//曲线数据查看
void MainWindow::s_ShowCurve(QString strSlfName, QString strName)
{
if(m_centerWidgets)
{
WellLogTableDialogNew* pDialog = new WellLogTableDialogNew();
pDialog->setName(strSlfName, strName);
m_centerWidgets->addTab(pDialog, strName);
int iCount = m_centerWidgets->count();
m_centerWidgets->m_pTabBar->setCurrentIndex(iCount-1);
}
}