1047 lines
37 KiB
C++
1047 lines
37 KiB
C++
#include "mainwindownew.h"
|
||
#include "ui_mainwindownew.h"
|
||
#include <QVBoxLayout>
|
||
#include <QScrollArea>
|
||
|
||
#include <QRandomGenerator>
|
||
//
|
||
#include "formhead.h"
|
||
#include "formtitle.h"
|
||
#include "formdraw.h"
|
||
#include "formline.h"
|
||
#include "mycustomplot.h"
|
||
#include "CallManage.h"
|
||
#include "qtcenterwidgets.h"
|
||
#include "qtcommonclass.h"
|
||
|
||
//以下参数从配置文件读取
|
||
extern int g_iIndex;
|
||
extern int g_iNum;
|
||
extern int g_iOneWidth; //道宽
|
||
extern int g_iHeadHigh; //道头高度
|
||
extern int g_iTitleHigh; //道对象高度
|
||
extern int g_iCurveHigh;//曲线高度
|
||
extern int g_iMove; //道头偏移
|
||
extern int g_iPointNum; // number of points in graph
|
||
extern int g_iLineNum; // number of Line
|
||
extern int g_iWidth; //道宽
|
||
//
|
||
extern int g_iX1;
|
||
extern int g_iX2;
|
||
extern int g_iY1;
|
||
extern int g_iY2;
|
||
extern int g_iCanZoom ;
|
||
|
||
MainWindowNew::MainWindowNew(QWidget *parent) :
|
||
QMainWindow(parent),
|
||
ui(new Ui::MainWindowNew)
|
||
{
|
||
ui->setupUi(this);
|
||
|
||
// 设置工具栏的位置,此处设置为在左侧
|
||
addToolBar(Qt::LeftToolBarArea, ui->toolBar);
|
||
|
||
//初始化工具栏
|
||
initMainToolBar();
|
||
initToolBar();
|
||
|
||
//参数从配置文件读取
|
||
ReadConfig();
|
||
|
||
//加载样式
|
||
//loadStyle(":/qrc/qss/lightblue.css");
|
||
//loadStyle(":/qrc/qss/blacksoft.css");
|
||
loadStyle(":/qrc/qss/flatgray.css");
|
||
|
||
//setWindowState(Qt::WindowMaximized);//最大化
|
||
|
||
//停靠
|
||
dockLayout();
|
||
|
||
//QWidget *centralWidget = ui->centralWidget;
|
||
centralWidget = ui->centralWidget;
|
||
|
||
//----------------------
|
||
graphicsView = new QGraphicsView(this);
|
||
scene = new QGraphicsScene(this);
|
||
graphicsView->setScene(scene);
|
||
//
|
||
auto *layout = new QVBoxLayout(centralWidget);
|
||
layout->setContentsMargins(0,0,0,0);
|
||
layout->addWidget(graphicsView);
|
||
//----------------------
|
||
|
||
// 添加多个按钮或其他小部件来模拟内容过多的情况
|
||
QString strName = "";
|
||
for (int i = 0; i < g_iIndex; ++i) {
|
||
//道头
|
||
strName = "道" + QString::number(i+1);
|
||
FormHead *formHead = new FormHead(graphicsView, i+1);
|
||
formHead->Init();
|
||
formHead->Add(strName, QColor(Qt::white));
|
||
formHead->setGeometry(g_iMove+g_iOneWidth*i, 0, g_iOneWidth, g_iHeadHigh); // 设置标签的位置和大小
|
||
|
||
|
||
//对象
|
||
FormTitle *formTitle = new FormTitle(graphicsView, i+1);
|
||
formTitle->setGeometry(g_iMove+g_iOneWidth*i, g_iHeadHigh, g_iOneWidth, g_iTitleHigh); // 设置标签的位置和大小
|
||
|
||
//
|
||
MyCustomPlot *curv = new MyCustomPlot(graphicsView, i+1);
|
||
//背景设置成透明色
|
||
curv->setBackground(Qt::transparent);
|
||
curv->setStyleSheet("background: transparent;");
|
||
curv->setGeometry(0.5+g_iOneWidth*i, g_iHeadHigh+g_iTitleHigh-15, g_iOneWidth+29, g_iCurveHigh); // 设置标签的位置和大小
|
||
initForm(curv, "", g_iLineNum, formTitle);
|
||
|
||
//
|
||
scene->addWidget(formHead);
|
||
scene->addWidget(formTitle);
|
||
scene->addWidget(curv);
|
||
|
||
// 连接信号和槽
|
||
connect(formTitle, &FormTitle::sig_LineClicked, curv, &MyCustomPlot::s_LineClicked);
|
||
connect(formTitle, &FormTitle::removeSelectedGraphByTitle, curv, &MyCustomPlot::removeSelectedGraphByTitle);
|
||
}
|
||
|
||
if(g_iMove+g_iOneWidth*g_iNum < g_iWidth)
|
||
{
|
||
centralWidget->setGeometry(0, 0, g_iWidth, g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
else {
|
||
centralWidget->setGeometry(0, 0, g_iMove+g_iOneWidth*g_iNum, g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
|
||
|
||
|
||
//滚动条
|
||
//QScrollArea *scrollArea = new QScrollArea();
|
||
scrollArea = new QScrollArea();
|
||
// widget是你想要放置内容的QWidget
|
||
scrollArea->setWidget(centralWidget);
|
||
// 设置滚动条一直显示
|
||
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
|
||
// 设置滚动区域为主窗口的中心部件
|
||
setCentralWidget(scrollArea);
|
||
|
||
|
||
//关联信号槽
|
||
connect(CallManage::getInstance(), SIGNAL(sig_Open()), this, SLOT(s_open()));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_Risize()), this, SLOT(s_risize()));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_AddOne()), this, SLOT(s_addOne()));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_AddLine(int)), this, SLOT(s_addLine(int)));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_DelOne(int)), this, SLOT(s_delOne(int)));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_SaveImg()), this, SLOT(s_SaveImg()));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_DrawImg()), this, SLOT(s_DrawImg()));
|
||
connect(CallManage::getInstance(), SIGNAL(sig_DrawLine()), this, SLOT(s_DrawLine()));
|
||
|
||
}
|
||
|
||
MainWindowNew::~MainWindowNew()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
//初始化工具栏
|
||
void MainWindowNew::initMainToolBar()
|
||
{
|
||
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_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 MainWindowNew::initToolBar()
|
||
{
|
||
QSize toolIconSize(18, 18);
|
||
ui->toolBar->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_newAc2 = new QAction(newFileIcon, "", this);
|
||
m_openAc2 = new QAction(openFileIcon, "", this);
|
||
m_grepAc2 = new QAction(grepIcon, "", this);
|
||
m_compileAc2 = new QAction(compileIcon, "", this);
|
||
m_runAc2 = new QAction(runIcon, "", this);
|
||
m_debugAc2 = new QAction(debugIcon, "", this);
|
||
m_loadAc2 = new QAction(loadIcon, "", this);
|
||
|
||
m_newAc2->setToolTip("道");
|
||
m_openAc2->setToolTip("深度");
|
||
m_grepAc2->setToolTip("曲线");
|
||
m_compileAc2->setToolTip("波列");
|
||
m_runAc2->setToolTip("解释结论道");
|
||
m_debugAc2->setToolTip("固井结论道");
|
||
m_loadAc2->setToolTip("井壁取心");
|
||
ui->toolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); //此种方式为文字显示在图标右侧
|
||
|
||
//add QAction to Widget.
|
||
ui->toolBar->addAction(m_newAc2);
|
||
ui->toolBar->addAction(m_openAc2);
|
||
ui->toolBar->addAction(m_grepAc2);
|
||
ui->toolBar->addAction(m_compileAc2);
|
||
ui->toolBar->addAction(m_runAc2);
|
||
ui->toolBar->addAction(m_debugAc2);
|
||
ui->toolBar->addAction(m_loadAc2);
|
||
|
||
// 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 MainWindowNew::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 MainWindowNew::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 MainWindowNew::addRandomGraph(MyCustomPlot *widget, QVector<double> x, QVector<double> y, FormTitle *formTitle, QString strLineName)
|
||
{
|
||
widget->addGraph();
|
||
if(strLineName=="")
|
||
{
|
||
strLineName = QString("曲线 %1").arg(widget->graphCount());
|
||
}
|
||
widget->graph()->setName(strLineName);
|
||
widget->graph()->setData(x, y);
|
||
|
||
widget->graph()->setLineStyle((QCPGraph::LineStyle)(1));//曲线
|
||
//widget->graph()->setLineStyle((QCPGraph::LineStyle)(std::rand()%5+1));
|
||
//widget->graph()->setLineStyle((QCPGraph::LineStyle)(QCPGraph::lsLine));//曲线
|
||
//widget->graph()->setLineStyle((QCPGraph::LineStyle)(QCPGraph::lsImpulse));//杆状
|
||
|
||
// if (std::rand()%100 > 50)
|
||
// widget->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(std::rand()%14+1)));
|
||
widget->graph()->setScatterStyle(QCPScatterStyle((QCPScatterStyle::ScatterShape)(1)));
|
||
//widget->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));
|
||
|
||
QPen graphPen;
|
||
QColor lineColor = QColor(std::rand()%245+10, std::rand()%245+10, std::rand()%245+10);
|
||
graphPen.setColor(lineColor);
|
||
//graphPen.setWidthF(std::rand()/(double)RAND_MAX*2+1);
|
||
graphPen.setWidthF(2);
|
||
widget->graph()->setPen(graphPen);
|
||
//widget->replot();
|
||
|
||
//道-对象
|
||
formTitle->Add(strLineName, lineColor);
|
||
|
||
}
|
||
|
||
void MainWindowNew::initForm(MyCustomPlot *widget, QString strName, int num, FormTitle *formTitle)
|
||
{
|
||
//道-对象清空
|
||
formTitle->Init();
|
||
|
||
//
|
||
//widget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes |
|
||
// QCP::iSelectLegend | QCP::iSelectPlottables);
|
||
|
||
widget->setInteractions(QCP::iSelectLegend | QCP::iSelectPlottables);
|
||
|
||
//拖动区域放大(即通过鼠标左键拖动绘制矩形框选区域进行放大)/////////////////
|
||
if(g_iCanZoom==1)
|
||
{
|
||
widget->setInteraction(QCP::iRangeDrag, false); // 关闭拖动
|
||
widget->setSelectionRectMode(QCP::SelectionRectMode::srmZoom); // 启用框选放大
|
||
//
|
||
widget->selectionRect()->setPen(QPen(Qt::black, 1, Qt::DashLine)); // 虚线边框
|
||
widget->selectionRect()->setBrush(QBrush(QColor(0,0,100,50))); // 半透明蓝色填充
|
||
//
|
||
QCPSelectionRect *selectionRect = new QCPSelectionRect(widget);
|
||
connect(selectionRect, &QCPSelectionRect::accepted, [=]() {
|
||
// 当选择完成时,获取矩形范围并放大
|
||
QRectF rect = selectionRect->rect(); // 获取选择的矩形区域(像素坐标)
|
||
|
||
// 转换为坐标轴范围
|
||
double x1 = widget->xAxis->pixelToCoord(rect.left());
|
||
double x2 = widget->xAxis->pixelToCoord(rect.right());
|
||
double y1 = widget->yAxis->pixelToCoord(rect.top());
|
||
double y2 = widget->yAxis->pixelToCoord(rect.bottom());
|
||
|
||
// 设置新的坐标轴范围
|
||
widget->xAxis->setRange(x1, x2);
|
||
widget->yAxis->setRange(y1, y2);
|
||
widget->replot();
|
||
});
|
||
}
|
||
//拖动区域放大(即通过鼠标左键拖动绘制矩形框选区域进行放大)//////////////
|
||
|
||
widget->m_iX1 = g_iX1;
|
||
widget->m_iX2 = g_iX2;
|
||
widget->m_iY1 = g_iY1;
|
||
widget->m_iY2 = g_iY2;
|
||
//
|
||
widget->xAxis->setRange(g_iX1, g_iX2);
|
||
widget->yAxis->setRange(g_iY1, g_iY2);
|
||
widget->axisRect()->setupFullAxesBox();
|
||
|
||
widget->xAxis->ticker()->setTickCount(10);//x个主刻度
|
||
widget->yAxis->ticker()->setTickCount(60);//y个主刻度
|
||
|
||
|
||
// 设置刻度密度
|
||
// QSharedPointer<QCPAxisTickerFixed>MyTicker(new QCPAxisTickerFixed);
|
||
// MyTicker->setTickStep(10);
|
||
// MyTicker->setTickCount(300);
|
||
// widget->xAxis->setTicker(MyTicker);
|
||
|
||
|
||
// widget->plotLayout()->insertRow(0);
|
||
// QCPTextElement *title = new QCPTextElement(widget, strName, QFont("sans", 17, QFont::Bold));
|
||
// widget->plotLayout()->addElement(0, 0, title);
|
||
|
||
// widget->xAxis->setLabel("x");
|
||
// widget->yAxis->setLabel("y");
|
||
|
||
//对调XY轴,在最前面设置
|
||
QCPAxis *yAxis = widget->yAxis;
|
||
QCPAxis *xAxis = widget->xAxis;
|
||
widget->xAxis = yAxis;
|
||
widget->yAxis = xAxis;
|
||
|
||
|
||
// widget->legend->setVisible(true);
|
||
// QFont legendFont = font();
|
||
// legendFont.setPointSize(10);
|
||
// widget->legend->setFont(legendFont);
|
||
// widget->legend->setSelectedFont(legendFont);
|
||
// widget->legend->setSelectableParts(QCPLegend::spItems); // legend box shall not be selectable, only legend items
|
||
|
||
QVector<double> x(g_iPointNum), y(g_iPointNum);
|
||
for(int k=0; k<num; k++)
|
||
{
|
||
double xScale = (std::rand()/(double)RAND_MAX + 0.5)*2;
|
||
double yScale = (std::rand()/(double)RAND_MAX + 0.5)*2;
|
||
double xOffset = (std::rand()/(double)RAND_MAX - 0.5)*4;
|
||
double yOffset = (std::rand()/(double)RAND_MAX - 0.5)*10;
|
||
double r1 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r2 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r3 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r4 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
//
|
||
for (int i=0; i<g_iPointNum; i++)
|
||
{
|
||
x[i] = -i*0.1;//(i/(double)n-0.5)*10.0*xScale + xOffset;
|
||
//y[i] = ((std::rand()/(double)RAND_MAX)*30-g_iX2)*0.6;
|
||
int randomNumber = QRandomGenerator::global()->bounded(10);
|
||
y[i] = (qSin(x[i]*r1*5)*qSin(qCos(x[i]*r2)*r4*3)+r3*qCos(qSin(x[i])*r4*2))*yScale + yOffset + randomNumber*0.01;
|
||
}
|
||
addRandomGraph(widget, x, y, formTitle, "");
|
||
}
|
||
|
||
//widget->rescaleAxes();
|
||
widget->replot();
|
||
}
|
||
|
||
void MainWindowNew::s_open()
|
||
{
|
||
// 1.获取当前运行程序的目录路径
|
||
QString applicationDirPath = QCoreApplication::applicationDirPath();
|
||
QString fileNames;
|
||
fileNames = applicationDirPath + "/test.csv";
|
||
|
||
QList<QStringList> listDatas;
|
||
QFile file(fileNames);
|
||
if (!file.exists())
|
||
{
|
||
QMessageBox::information(nullptr, "提示", "test.csv文件不存在!");
|
||
return;
|
||
}
|
||
//
|
||
if (file.open(QIODevice::ReadOnly))
|
||
{
|
||
int iIndex = 1;
|
||
bool isHeader = true;
|
||
while (!file.atEnd())//判断是否读到文件尾
|
||
{
|
||
QString strData = QString::fromLocal8Bit(file.readLine().replace("\r\n", "")); //按行读,追加
|
||
//string strData = file.readLine().data();//QString::fromLocal8Bit(file.readLine()); //按行读,追加
|
||
if (isHeader)
|
||
{
|
||
isHeader = false;
|
||
}
|
||
else
|
||
{
|
||
QString strNewData = "";
|
||
strNewData = strData; //按行读,追加
|
||
|
||
//QString strNewData = QString::fromStdString(strData);
|
||
QStringList array = strNewData.split(",");
|
||
if (array.size() == 0)
|
||
{
|
||
continue;
|
||
}
|
||
listDatas.append(array);
|
||
iIndex++;
|
||
}
|
||
}
|
||
file.close();
|
||
}
|
||
|
||
for(int iDataNum=0; iDataNum<4; iDataNum++)
|
||
{
|
||
if(g_iMove+g_iOneWidth*g_iNum < g_iWidth)
|
||
{
|
||
centralWidget->setGeometry(0, 0, g_iWidth, g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
else {
|
||
centralWidget->setGeometry(0, 0, g_iMove+g_iOneWidth*(g_iNum+1), g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
|
||
//道头
|
||
QString strName = "道" + QString::number(g_iIndex+1);
|
||
FormHead *formHead = new FormHead(graphicsView, g_iIndex+1);
|
||
formHead->Init();
|
||
formHead->Add(strName, QColor(Qt::white));
|
||
formHead->setGeometry(g_iMove+g_iOneWidth*g_iNum, 0, g_iOneWidth, g_iHeadHigh); // 设置标签的位置和大小
|
||
formHead->setVisible(true);
|
||
|
||
//对象
|
||
FormTitle *formTitle = new FormTitle(graphicsView, g_iIndex+1);
|
||
formTitle->setGeometry(g_iMove+g_iOneWidth*g_iNum, g_iHeadHigh, g_iOneWidth, g_iTitleHigh); // 设置标签的位置和大小
|
||
formTitle->setVisible(true);
|
||
|
||
//
|
||
MyCustomPlot *curv = new MyCustomPlot(graphicsView, g_iIndex+1);
|
||
//背景设置成透明色
|
||
curv->setBackground(Qt::transparent);
|
||
curv->setStyleSheet("background: transparent;");
|
||
curv->setGeometry(0.5+g_iOneWidth*g_iNum, g_iHeadHigh+g_iTitleHigh-15, g_iOneWidth+29, g_iCurveHigh); // 设置标签的位置和大小
|
||
curv->setVisible(true);
|
||
//initForm(curv, "", 0, formTitle);
|
||
|
||
//-------------
|
||
scene->addWidget(formHead);
|
||
scene->addWidget(formTitle);
|
||
scene->addWidget(curv);
|
||
|
||
//道-对象清空
|
||
formTitle->Init();
|
||
|
||
//
|
||
//curv->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectAxes |
|
||
// QCP::iSelectLegend | QCP::iSelectPlottables);
|
||
|
||
curv->setInteractions(QCP::iSelectLegend | QCP::iSelectPlottables);
|
||
|
||
//拖动区域放大(即通过鼠标左键拖动绘制矩形框选区域进行放大)/////////////////
|
||
if(g_iCanZoom==1)
|
||
{
|
||
curv->setInteraction(QCP::iRangeDrag, false); // 关闭拖动
|
||
curv->setSelectionRectMode(QCP::SelectionRectMode::srmZoom); // 启用框选放大
|
||
//
|
||
curv->selectionRect()->setPen(QPen(Qt::black, 1, Qt::DashLine)); // 虚线边框
|
||
curv->selectionRect()->setBrush(QBrush(QColor(0,0,100,50))); // 半透明蓝色填充
|
||
//
|
||
QCPSelectionRect *selectionRect = new QCPSelectionRect(curv);
|
||
connect(selectionRect, &QCPSelectionRect::accepted, [=]() {
|
||
// 当选择完成时,获取矩形范围并放大
|
||
QRectF rect = selectionRect->rect(); // 获取选择的矩形区域(像素坐标)
|
||
|
||
// 转换为坐标轴范围
|
||
double x1 = curv->xAxis->pixelToCoord(rect.left());
|
||
double x2 = curv->xAxis->pixelToCoord(rect.right());
|
||
double y1 = curv->yAxis->pixelToCoord(rect.top());
|
||
double y2 = curv->yAxis->pixelToCoord(rect.bottom());
|
||
|
||
// 设置新的坐标轴范围
|
||
curv->xAxis->setRange(x1, x2);
|
||
curv->yAxis->setRange(y1, y2);
|
||
curv->replot();
|
||
});
|
||
}
|
||
//拖动区域放大(即通过鼠标左键拖动绘制矩形框选区域进行放大)//////////////
|
||
|
||
if(iDataNum==0)
|
||
{
|
||
curv->m_iX1 = -5000;
|
||
curv->m_iX2 = 5000;
|
||
curv->m_iY1 = -500;
|
||
curv->m_iY2 = 0;
|
||
//
|
||
curv->xAxis->setRange(-5000, 5000);
|
||
curv->yAxis->setRange(-500, 0);
|
||
curv->axisRect()->setupFullAxesBox();
|
||
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
|
||
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
|
||
}
|
||
else if(iDataNum==1 || iDataNum==2)
|
||
{
|
||
curv->m_iX1 = 0;
|
||
curv->m_iX2 = 150;
|
||
curv->m_iY1 = -500;
|
||
curv->m_iY2 = 0;
|
||
//
|
||
curv->xAxis->setRange(0, 150);
|
||
curv->yAxis->setRange(-500, 0);
|
||
curv->axisRect()->setupFullAxesBox();
|
||
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
|
||
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
|
||
}
|
||
else if(iDataNum==3)
|
||
{
|
||
curv->m_iX1 = 10;
|
||
curv->m_iX2 = 20;
|
||
curv->m_iY1 = -500;
|
||
curv->m_iY2 = 0;
|
||
//
|
||
curv->xAxis->setRange(10, 20);
|
||
curv->yAxis->setRange(-500, 0);
|
||
curv->axisRect()->setupFullAxesBox();
|
||
curv->xAxis->ticker()->setTickCount(10);//x个主刻度
|
||
curv->yAxis->ticker()->setTickCount(60);//y个主刻度
|
||
}
|
||
|
||
|
||
//对调XY轴,在最前面设置
|
||
QCPAxis *yAxis = curv->yAxis;
|
||
QCPAxis *xAxis = curv->xAxis;
|
||
curv->xAxis = yAxis;
|
||
curv->yAxis = xAxis;
|
||
|
||
//
|
||
// 连接信号和槽
|
||
connect(formTitle, &FormTitle::sig_LineClicked, curv, &MyCustomPlot::s_LineClicked);
|
||
connect(formTitle, &FormTitle::removeSelectedGraphByTitle, curv, &MyCustomPlot::removeSelectedGraphByTitle);
|
||
//
|
||
g_iIndex++;
|
||
g_iNum++;
|
||
|
||
//画线---------------
|
||
if(curv && formTitle)
|
||
{
|
||
int iSize = listDatas.size();
|
||
QVector<double> x(iSize), y(iSize);
|
||
for (int i=0; i<iSize; i++)
|
||
{
|
||
x[i] = 0 - listDatas[i][0].toDouble();
|
||
y[i] = listDatas[i][iDataNum+1].toDouble();
|
||
}
|
||
|
||
QString strLineName = QString("新增曲线 %1").arg(curv->m_indexLine+1);
|
||
curv->m_indexLine++;
|
||
addRandomGraph(curv, x, y, formTitle, strLineName);
|
||
|
||
//curv->rescaleAxes();
|
||
curv->replot();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
void MainWindowNew::s_risize()
|
||
{
|
||
g_iCanZoom = 1;
|
||
}
|
||
|
||
void MainWindowNew::s_addOne()
|
||
{
|
||
// QMessageBox::StandardButton reply;
|
||
// reply = QMessageBox::question(this, "提示", "是否添加新道?",
|
||
// QMessageBox::Yes | QMessageBox::No);
|
||
// if (reply != QMessageBox::Yes) {
|
||
// return; // 取消
|
||
// }
|
||
|
||
|
||
//QWidget *centralWidget = ui->centralWidget;
|
||
|
||
if(g_iMove+g_iOneWidth*g_iNum < g_iWidth)
|
||
{
|
||
centralWidget->setGeometry(0, 0, g_iWidth, g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
else {
|
||
centralWidget->setGeometry(0, 0, g_iMove+g_iOneWidth*(g_iNum+1), g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
|
||
//道头
|
||
QString strName = "道" + QString::number(g_iIndex+1);
|
||
FormHead *formHead = new FormHead(graphicsView, g_iIndex+1);
|
||
formHead->Init();
|
||
formHead->Add(strName, QColor(Qt::white));
|
||
formHead->setGeometry(g_iMove+g_iOneWidth*g_iNum, 0, g_iOneWidth, g_iHeadHigh); // 设置标签的位置和大小
|
||
formHead->setVisible(true);
|
||
|
||
//对象
|
||
FormTitle *formTitle = new FormTitle(graphicsView, g_iIndex+1);
|
||
formTitle->setGeometry(g_iMove+g_iOneWidth*g_iNum, g_iHeadHigh, g_iOneWidth, g_iTitleHigh); // 设置标签的位置和大小
|
||
formTitle->setVisible(true);
|
||
|
||
//
|
||
MyCustomPlot *curv = new MyCustomPlot(graphicsView, g_iIndex+1);
|
||
//背景设置成透明色
|
||
curv->setBackground(Qt::transparent);
|
||
curv->setStyleSheet("background: transparent;");
|
||
//curv->setGeometry(g_iOneWidth, g_iHeadHigh+g_iTitleHigh, g_iOneWidth+27, g_iCurveHigh); // 设置标签的位置和大小
|
||
curv->setGeometry(0.5+g_iOneWidth*g_iNum, g_iHeadHigh+g_iTitleHigh-15, g_iOneWidth+29, g_iCurveHigh); // 设置标签的位置和大小
|
||
curv->setVisible(true);
|
||
initForm(curv, "", g_iLineNum, formTitle);
|
||
|
||
//------------------------
|
||
scene->addWidget(formHead);
|
||
scene->addWidget(formTitle);
|
||
scene->addWidget(curv);
|
||
|
||
// 连接信号和槽
|
||
connect(formTitle, &FormTitle::sig_LineClicked, curv, &MyCustomPlot::s_LineClicked);
|
||
connect(formTitle, &FormTitle::removeSelectedGraphByTitle, curv, &MyCustomPlot::removeSelectedGraphByTitle);
|
||
//
|
||
g_iIndex++;
|
||
g_iNum++;
|
||
}
|
||
|
||
void MainWindowNew::s_addLine(int indexID)
|
||
{
|
||
qDebug() << "MainWindowNew s_addLine";
|
||
|
||
// QString strQuestion = "是否新建曲线?\n道编号:" + QString::number(indexID);
|
||
// QMessageBox::StandardButton reply;
|
||
// reply = QMessageBox::question(this, "提示", strQuestion,
|
||
// QMessageBox::Yes | QMessageBox::No);
|
||
// if (reply != QMessageBox::Yes) {
|
||
// return; // 取消
|
||
// }
|
||
|
||
MyCustomPlot *widget = nullptr;
|
||
FormTitle *formTitle =nullptr;
|
||
|
||
// 获取当前widget的所有子控件
|
||
const QObjectList &children = centralWidget->children();
|
||
// 遍历子控件列表
|
||
for (QObject *child : children) {
|
||
// 判断子控件是否为QWidget类型
|
||
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
|
||
// 打印子控件的信息,使用缩进表示层级关系
|
||
qDebug() << QString("%1").arg(childWidget->objectName());
|
||
QString strObjName = childWidget->objectName();
|
||
if(strObjName=="FormTitle")
|
||
{
|
||
FormTitle *form = (FormTitle*)childWidget;
|
||
if(form->m_indexID == indexID)
|
||
{
|
||
formTitle = form;
|
||
//break;
|
||
}
|
||
}
|
||
else if(strObjName=="MyCustomPlot")
|
||
{
|
||
MyCustomPlot *form = (MyCustomPlot*)childWidget;
|
||
if(form->m_indexID == indexID)
|
||
{
|
||
widget = form;
|
||
//break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if(widget && formTitle)
|
||
{
|
||
QVector<double> x(g_iPointNum), y(g_iPointNum);
|
||
|
||
double xScale = (std::rand()/(double)RAND_MAX + 0.5)*2;
|
||
double yScale = (std::rand()/(double)RAND_MAX + 0.5)*2;
|
||
double xOffset = (std::rand()/(double)RAND_MAX - 0.5)*4;
|
||
double yOffset = (std::rand()/(double)RAND_MAX - 0.5)*10;
|
||
double r1 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r2 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r3 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
double r4 = (std::rand()/(double)RAND_MAX - 0.5)*2;
|
||
//
|
||
for (int i=0; i<g_iPointNum; i++)
|
||
{
|
||
x[i] = -i*0.1;//(i/(double)n-0.5)*10.0*xScale + xOffset;
|
||
//y[i] = ((std::rand()/(double)RAND_MAX)*30-g_iX2)*0.6;
|
||
int randomNumber = QRandomGenerator::global()->bounded(10);
|
||
y[i] = (qSin(x[i]*r1*5)*qSin(qCos(x[i]*r2)*r4*3)+r3*qCos(qSin(x[i])*r4*2))*yScale + yOffset + randomNumber*0.01;
|
||
}
|
||
|
||
QString strLineName = QString("新增曲线 %1").arg(widget->m_indexLine+1);
|
||
widget->m_indexLine++;
|
||
addRandomGraph(widget, x, y, formTitle, strLineName);
|
||
|
||
//widget->rescaleAxes();
|
||
widget->replot();
|
||
}
|
||
|
||
}
|
||
|
||
void MainWindowNew::s_delOne(int indexID)
|
||
{
|
||
QString strQuestion = "是否删除道?\n编号:" + QString::number(indexID);
|
||
QMessageBox::StandardButton reply;
|
||
reply = QMessageBox::question(this, "提示", strQuestion,
|
||
QMessageBox::Yes | QMessageBox::No);
|
||
if (reply != QMessageBox::Yes) {
|
||
return; // 取消
|
||
}
|
||
|
||
// 获取当前widget的所有子控件
|
||
const QObjectList &children = centralWidget->children();
|
||
// 遍历子控件列表
|
||
for (QObject *child : children) {
|
||
// 判断子控件是否为QWidget类型
|
||
if (QWidget *childWidget = qobject_cast<QWidget *>(child)) {
|
||
// 打印子控件的信息,使用缩进表示层级关系
|
||
qDebug() << QString("%1").arg(childWidget->objectName());
|
||
QString strObjName = childWidget->objectName();
|
||
if(strObjName=="FormHead")
|
||
{
|
||
FormHead *form = (FormHead*)childWidget;
|
||
if(form->m_indexID == indexID)
|
||
{
|
||
childWidget->deleteLater(); // 安排控件的删除,稍后执行
|
||
//break;
|
||
}
|
||
}
|
||
else if(strObjName=="FormTitle")
|
||
{
|
||
FormTitle *form = (FormTitle*)childWidget;
|
||
if(form->m_indexID == indexID)
|
||
{
|
||
childWidget->deleteLater(); // 安排控件的删除,稍后执行
|
||
//break;
|
||
}
|
||
}
|
||
else if(strObjName=="MyCustomPlot")
|
||
{
|
||
MyCustomPlot *form = (MyCustomPlot*)childWidget;
|
||
if(form->m_indexID == indexID)
|
||
{
|
||
childWidget->deleteLater(); // 安排控件的删除,稍后执行
|
||
//break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//暂时不处理删除,坐标调整
|
||
//g_iNum--;
|
||
//centralWidget->setGeometry(0, 0, g_iMove+g_iOneWidth*g_iNum, g_iHeadHigh+g_iTitleHigh+g_iCurveHigh); // 设置标签的位置和大小
|
||
}
|
||
|
||
void MainWindowNew::s_SaveImg()
|
||
{
|
||
QString strQuestion = "是否保存图像?";
|
||
QMessageBox::StandardButton reply;
|
||
reply = QMessageBox::question(this, "提示", strQuestion,
|
||
QMessageBox::Yes | QMessageBox::No);
|
||
if (reply != QMessageBox::Yes) {
|
||
return; // 取消
|
||
}
|
||
|
||
// 1.获取当前运行程序的目录路径
|
||
QString applicationDirPath = QCoreApplication::applicationDirPath();
|
||
QString configPath;
|
||
configPath = applicationDirPath + "/1.png";
|
||
|
||
//指标体系图
|
||
QPixmap pCenter = centralWidget->grab(QRect(0, 0, centralWidget->width(), centralWidget->height()));
|
||
//pCenter.save(configPath, "png");
|
||
QPixmap pImageHead = m_ImageHeadTable->grab(QRect(0, 0, m_ImageHeadTable->width(), m_ImageHeadTable->height()));
|
||
|
||
// 创建一个足够大的QPixmap作为画布
|
||
int width = std::max({pImageHead.width(), pCenter.width()});// 最大宽度
|
||
int height = pImageHead.height()+ pCenter.height(); // 总高度
|
||
QPixmap result(width, height);
|
||
result.fill(Qt::transparent); // 填充背景为透明,或者使用其他颜色填充背景
|
||
|
||
// 使用QPainter绘制小QPixmap
|
||
QPainter painter(&result);
|
||
painter.drawPixmap(0, 0, pImageHead); // 在(0,0)位置绘制pixmap1
|
||
painter.drawPixmap(0, pImageHead.height(), pCenter); // 在pixmap1右侧绘制pixmap2
|
||
//painter.drawPixmap(pixmap1.width() + pixmap2.width(), 0, pixmap3); // 在右侧继续绘制pixmap3
|
||
result.save(configPath, "png");
|
||
}
|
||
|
||
|
||
void MainWindowNew::s_DrawImg()
|
||
{
|
||
QString strQuestion = "是否画图?";
|
||
QMessageBox::StandardButton reply;
|
||
reply = QMessageBox::question(this, "提示", strQuestion,
|
||
QMessageBox::Yes | QMessageBox::No);
|
||
if (reply != QMessageBox::Yes) {
|
||
return; // 取消
|
||
}
|
||
|
||
FormDraw *formDraw = new FormDraw(centralWidget);
|
||
//formDraw->setStyleSheet("QWidget { background-color: red; }");
|
||
formDraw->setGeometry(100, g_iHeadHigh+g_iTitleHigh+200, 200, 200); // 设置标签的位置和大小
|
||
formDraw->setVisible(true);
|
||
}
|
||
|
||
void MainWindowNew::s_DrawLine()
|
||
{
|
||
QString strQuestion = "是否画线?";
|
||
QMessageBox::StandardButton reply;
|
||
reply = QMessageBox::question(this, "提示", strQuestion,
|
||
QMessageBox::Yes | QMessageBox::No);
|
||
if (reply != QMessageBox::Yes) {
|
||
return; // 取消
|
||
}
|
||
|
||
FormLine *formLine = new FormLine(centralWidget);
|
||
formLine->setGeometry(100, g_iHeadHigh+g_iTitleHigh+100, 200, 2); // 设置标签的位置和大小
|
||
formLine->setVisible(true);
|
||
}
|
||
|
||
//停靠
|
||
void MainWindowNew::dockLayout()
|
||
{
|
||
//
|
||
QDockWidget *dockImageHead=new QDockWidget(tr(""),this);
|
||
//停靠窗口4
|
||
dockImageHead->setFeatures(QDockWidget::DockWidgetClosable);//|QDockWidget::DockWidgetFloatable
|
||
//dockImageHead->setAllowedAreas(Qt::TopDockWidgetArea);
|
||
|
||
QWidget *dockWidgetContents = new QWidget();
|
||
//dockWidgetContents->setGeometry(0,0,800,400);
|
||
|
||
if(!m_ImageHeadTable)
|
||
{
|
||
m_ImageHeadTable = new QTableWidget(dockWidgetContents);
|
||
m_ImageHeadTable->setMinimumSize(1100,300);
|
||
|
||
//清空
|
||
m_ImageHeadTable->clearContents();
|
||
//
|
||
m_ImageHeadTable->verticalHeader()->hide();
|
||
m_ImageHeadTable->horizontalHeader()->hide();
|
||
//因为tableWidget需要提前规定好行数与列数
|
||
int rowcount = 3; //总行数
|
||
int columnCount = 5;//总列数
|
||
m_ImageHeadTable->setColumnCount(columnCount);
|
||
m_ImageHeadTable->setRowCount(rowcount); //动态设置行数
|
||
for(int i=0; i<rowcount; i++)
|
||
{
|
||
for(int j=0; j<columnCount; j++)
|
||
{
|
||
QTableWidgetItem* item = new QTableWidgetItem("");
|
||
m_ImageHeadTable->setItem(i, j, item);
|
||
}
|
||
}
|
||
|
||
// 设置右键菜单策略
|
||
m_ImageHeadTable->setContextMenuPolicy(Qt::CustomContextMenu);
|
||
connect(m_ImageHeadTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
|
||
}
|
||
|
||
//-----
|
||
|
||
QVBoxLayout *layout = new QVBoxLayout(dockWidgetContents);
|
||
// 将你的widget添加到布局中
|
||
layout->addWidget(m_ImageHeadTable, 1, Qt::AlignCenter); // 使用Qt::AlignCenter进行居中
|
||
layout->setAlignment(Qt::AlignCenter); // 设置整个布局的居中
|
||
dockImageHead->setWidget(dockWidgetContents);
|
||
//-----
|
||
|
||
//dockImageHead->setWidget(m_ImageHeadTable);
|
||
addDockWidget(Qt::TopDockWidgetArea, dockImageHead);
|
||
}
|
||
|
||
void MainWindowNew::slotContextMenu(QPoint pos)
|
||
{
|
||
// 获取点击位置的 QTableWidgetItem
|
||
QTableWidgetItem *item = m_ImageHeadTable->itemAt(pos);
|
||
|
||
// 判断是否点击在有效数据区域
|
||
//if (item) {
|
||
if(1) {
|
||
QMenu menu(m_ImageHeadTable);
|
||
QAction *mergeAction = menu.addAction("合并表格");
|
||
QAction *refreshAction = menu.addAction("拆分表格");
|
||
QAction *deleteAction = menu.addAction("删除行");
|
||
QAction *addAction = menu.addAction("添加行");
|
||
|
||
// 弹出菜单
|
||
QAction *selectedAction = menu.exec(m_ImageHeadTable->mapToGlobal(pos));
|
||
|
||
if (selectedAction == mergeAction) {
|
||
qDebug() << "合并表格";
|
||
slotMerge();
|
||
} else if (selectedAction == deleteAction) {
|
||
int row = m_ImageHeadTable->currentRow();
|
||
m_ImageHeadTable->removeRow(row);
|
||
} else if (selectedAction == refreshAction) {
|
||
qDebug() << "拆分表格";
|
||
slotSplit();
|
||
}
|
||
|
||
} else {
|
||
// 点击在无效区域,不弹出菜单
|
||
qDebug() << "点击在无效区域,不弹出菜单";
|
||
}
|
||
|
||
|
||
}
|
||
|
||
//合并
|
||
void MainWindowNew::slotMerge()
|
||
{
|
||
QModelIndexList list = m_ImageHeadTable->selectionModel()->selectedIndexes();
|
||
if (list.size() < 2)
|
||
{
|
||
QMessageBox::warning(this, "单元格合并", "所选中单元格中为单个单元格,无法合并", "确定");
|
||
return;
|
||
}
|
||
|
||
int topRow = 0;
|
||
int leftCol = 0;
|
||
int bottomRow = 0;
|
||
int rightCol = 0;
|
||
|
||
QList<QTableWidgetSelectionRange> selectRanges = m_ImageHeadTable->selectedRanges();
|
||
|
||
if (selectRanges.size() > 0)
|
||
{
|
||
topRow = selectRanges[0].topRow();
|
||
leftCol = selectRanges[0].leftColumn();
|
||
bottomRow = selectRanges[0].bottomRow();
|
||
rightCol = selectRanges[0].rightColumn();
|
||
}
|
||
for(auto range:selectRanges)
|
||
{
|
||
if(range.topRow()<topRow)
|
||
topRow=range.topRow();
|
||
if(range.leftColumn()<leftCol)
|
||
leftCol=range.leftColumn();
|
||
if(range.bottomRow()> bottomRow)
|
||
bottomRow=range.bottomRow();
|
||
if(range.rightColumn()>rightCol)
|
||
rightCol=range.rightColumn();
|
||
}
|
||
|
||
int rowSpan = (bottomRow - topRow) + 1;
|
||
int colSpan = (rightCol - leftCol) + 1;
|
||
m_ImageHeadTable->setSpan(topRow, leftCol, rowSpan, colSpan);
|
||
}
|
||
|
||
|
||
//拆分
|
||
void MainWindowNew::slotSplit()
|
||
{
|
||
int row,col;
|
||
QList<QTableWidgetSelectionRange> selectRanges = m_ImageHeadTable->selectedRanges();
|
||
if (selectRanges.size() < 2)
|
||
{
|
||
QMessageBox::warning(this, "拆分表格失败", "单元格已是最小单位,不能再进行拆分", "确定");
|
||
return;
|
||
}
|
||
QList<QTableWidgetItem*> selectItems = m_ImageHeadTable->selectedItems();
|
||
if(selectItems.size()==0)
|
||
{
|
||
QMessageBox::warning(this, "拆分表格失败", "请先为表格设置元素item", "确定");
|
||
return;
|
||
}
|
||
if(selectItems.size()>1)
|
||
{
|
||
QMessageBox::warning(this, "拆分表格失败", "非法选择", "确定");
|
||
return;
|
||
}
|
||
for(auto item:selectItems)
|
||
{
|
||
row= item->row();
|
||
col=item->column();
|
||
}
|
||
|
||
m_ImageHeadTable->setSpan(row, col, 1, 1); // 设置跨度为1
|
||
}
|