diff --git a/logPlus/formmultiheads.cpp b/logPlus/formmultiheads.cpp index 7a57a37..dafa4e9 100644 --- a/logPlus/formmultiheads.cpp +++ b/logPlus/formmultiheads.cpp @@ -348,3 +348,22 @@ void FormMultiHeads::DisplayHeads(QJsonArray headsArray, QString strHeadOrTail) } } } + +//获取图头、结论的宽高,方便输出图 +void FormMultiHeads::getTableSize(int &iWidth, int &iHight) +{ + //获取可视视图大小 tableWidget + iHight = 0; + iWidth = 0; + for(int i=0; itableWidget->rowCount(); i++) + { + //高度 + iHight += ui->tableWidget->rowHeight(i); + } + + for(int j=0; jtableWidget->columnCount(); j++) + { + //高度 + iWidth += ui->tableWidget->columnWidth(j); + } +} diff --git a/logPlus/formmultiheads.h b/logPlus/formmultiheads.h index 81f3304..24d6402 100644 --- a/logPlus/formmultiheads.h +++ b/logPlus/formmultiheads.h @@ -39,6 +39,9 @@ public: //Head代表图头, Tail代表成果表 void DisplayHeads(QJsonArray headsArray, QString strHeadOrTail); + //获取图头、结论的宽高,方便输出图 + void getTableSize(int &iWidth, int &iHight); + public: QString m_strHeadOrTail = ""; //Head代表图头, Tail代表成果表 }; diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index a99cbc9..fa0e346 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -2357,15 +2357,11 @@ void MainWindowCurve::s_SaveAsPicture() // QString dir=pdfName; QString pngName =QFileDialog::getSaveFileName( NULL,"输出为图片",dir, - "图像文件(*.tif);;图像文件(*.png);;图像文件(*.jpg);;图像文件(*.bmp);;图像文件(*.xpm)"); + "图像文件(*.tif);;图像文件(*.png);;图像文件(*.jpg);;图像文件(*.bmp);;图像文件(*.xpm)"); if(pngName=="") { return; } - // 获取客户区几何信息(不含边框) - QRect geoRect = ui->centralwidget->geometry(); - qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() - << "w:" << geoRect.width() << "h:" << geoRect.height(); //获取可视视图大小 tableWidget_2 int iHight = 0; @@ -2375,20 +2371,83 @@ void MainWindowCurve::s_SaveAsPicture() //高度 iHight += ui->tableWidget_2->rowHeight(i); } + //ui->tableWidget_2->setRowHeight(1, iHight+200); + //iHight += 3000; for(int j=0; jtableWidget_2->columnCount(); j++) { - //高度 + //宽度 iWidth += ui->tableWidget_2->columnWidth(j); } + // + bool bVisible = m_dock1->isVisible(); + //第一次显示,判断是否从json加载 + if(m_bHeadLoadJson) + { + m_bHeadLoadJson = false; + + QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 + //展示所有图头 + strHeadOrTail = "Head"; //Head代表图头, Tail代表成果表 + m_formMultiHeads->DisplayHeads(m_headsArray, strHeadOrTail); + //展示所有成果表 + strHeadOrTail = "Tail"; //Head代表图头, Tail代表成果表 + m_formMultiTails->DisplayHeads(m_tailsArray, strHeadOrTail); + } + m_dock1->show(); + m_dock2->show(); + + //----------------------------- + //头 + int iWidth_Head, iHight_Head; + m_formMultiHeads->getTableSize(iWidth_Head, iHight_Head); + QRect geoRect_FormHead = m_dock1->geometry(); + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), iWidth_Head, iHight_Head); + + //中间 + // 获取客户区几何信息(不含边框) + QRect geoRect = ui->centralwidget->geometry(); + qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() + << "w:" << geoRect.width() << "h:" << geoRect.height(); //指标体系图 ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), iWidth, iHight); - QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + + //尾 + int iWidth_Tail, iHight_Tail; + m_formMultiTails->getTableSize(iWidth_Tail, iHight_Tail); + QRect geoRect_Tail = m_dock2->geometry(); + m_dock2->setGeometry(geoRect_Tail.x(), iHight+iHight_Head+40, iWidth_Tail, iHight_Tail); + //----------------------------- + + //QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + int iMaxWidth = iWidth; + if(iWidth_Head>iWidth_Tail) + { + if(iWidth_Head>iWidth) + { + iMaxWidth = iWidth_Head; + } + } + else + { + if(iWidth_Tail>iWidth) + { + iMaxWidth = iWidth_Tail; + } + } + QPixmap pPixmap = this->grab(QRect(geoRect_FormHead.x(), geoRect_FormHead.y(), iMaxWidth, iHight+iHight_Head+iHight_Tail+40)); pPixmap.save(pngName); //恢复窗口 + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), geoRect_FormHead.width(), geoRect_FormHead.height()); ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height()); + m_dock2->setGeometry(geoRect_Tail.x(), geoRect_Tail.y(), geoRect_Tail.width(), geoRect_Tail.height()); + if(!bVisible) + { + m_dock1->hide(); + m_dock2->hide(); + } } //导出PDF @@ -2416,29 +2475,91 @@ void MainWindowCurve::s_SaveAsPdf() return; } - // 获取客户区几何信息(不含边框) - QRect geoRect = ui->centralwidget->geometry(); - qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() - << "w:" << geoRect.width() << "h:" << geoRect.height(); - //获取可视视图大小 tableWidget_2 int iHight = 0; int iWidth = 0; - for(int i=0; i<2; i++) + for(int i=0; itableWidget_2->rowCount(); i++) { //高度 iHight += ui->tableWidget_2->rowHeight(i); } + //ui->tableWidget_2->setRowHeight(1, iHight+200); + //iHight += 3000; for(int j=0; jtableWidget_2->columnCount(); j++) { - //高度 + //宽度 iWidth += ui->tableWidget_2->columnWidth(j); } + // + bool bVisible = m_dock1->isVisible(); + //第一次显示,判断是否从json加载 + if(m_bHeadLoadJson) + { + m_bHeadLoadJson = false; + + QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 + //展示所有图头 + strHeadOrTail = "Head"; //Head代表图头, Tail代表成果表 + m_formMultiHeads->DisplayHeads(m_headsArray, strHeadOrTail); + //展示所有成果表 + strHeadOrTail = "Tail"; //Head代表图头, Tail代表成果表 + m_formMultiTails->DisplayHeads(m_tailsArray, strHeadOrTail); + } + m_dock1->show(); + m_dock2->show(); + + //----------------------------- + //头 + int iWidth_Head, iHight_Head; + m_formMultiHeads->getTableSize(iWidth_Head, iHight_Head); + QRect geoRect_FormHead = m_dock1->geometry(); + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), iWidth_Head, iHight_Head); + + //中间 + // 获取客户区几何信息(不含边框) + QRect geoRect = ui->centralwidget->geometry(); + qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() + << "w:" << geoRect.width() << "h:" << geoRect.height(); //指标体系图 ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), iWidth, iHight); - QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + + //尾 + int iWidth_Tail, iHight_Tail; + m_formMultiTails->getTableSize(iWidth_Tail, iHight_Tail); + QRect geoRect_Tail = m_dock2->geometry(); + m_dock2->setGeometry(geoRect_Tail.x(), iHight+iHight_Head+40, iWidth_Tail, iHight_Tail); + //----------------------------- + + //QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + int iMaxWidth = iWidth; + if(iWidth_Head>iWidth_Tail) + { + if(iWidth_Head>iWidth) + { + iMaxWidth = iWidth_Head; + } + } + else + { + if(iWidth_Tail>iWidth) + { + iMaxWidth = iWidth_Tail; + } + } + QPixmap pPixmap = this->grab(QRect(geoRect_FormHead.x(), geoRect_FormHead.y(), iMaxWidth, iHight+iHight_Head+iHight_Tail+40)); + //pPixmap.save(pngName); + + //恢复窗口 + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), geoRect_FormHead.width(), geoRect_FormHead.height()); + ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height()); + m_dock2->setGeometry(geoRect_Tail.x(), geoRect_Tail.y(), geoRect_Tail.width(), geoRect_Tail.height()); + if(!bVisible) + { + m_dock1->hide(); + m_dock2->hide(); + } // QPrinter printer;//(QPrinter::ScreenResolution); @@ -2454,7 +2575,7 @@ void MainWindowCurve::s_SaveAsPdf() printer.setOrientation(QPrinter::Portrait); printer.setPaperSize(QPrinter::Custom); - printer.setPaperSize(QSizeF(ui->centralwidget->width(), ui->centralwidget->height()),QPrinter::DevicePixel); + printer.setPaperSize(QSizeF(iMaxWidth, iHight+iHight_Head+iHight_Tail+40),QPrinter::DevicePixel); // float sx=1; @@ -2465,9 +2586,6 @@ void MainWindowCurve::s_SaveAsPdf() painter.scale(sx,sy); painter.drawPixmap(0, 0, pPixmap); painter.end(); - - //恢复窗口 - ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height()); } //导出长图 @@ -2494,44 +2612,105 @@ void MainWindowCurve::s_SaveAsSvg() if(pngName=="") { return; } - - // 获取客户区几何信息(不含边框) - QRect geoRect = ui->centralwidget->geometry(); - qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() - << "w:" << geoRect.width() << "h:" << geoRect.height(); - //获取可视视图大小 tableWidget_2 int iHight = 0; int iWidth = 0; - for(int i=0; i<2; i++) + for(int i=0; itableWidget_2->rowCount(); i++) { //高度 iHight += ui->tableWidget_2->rowHeight(i); } + //ui->tableWidget_2->setRowHeight(1, iHight+200); + //iHight += 3000; for(int j=0; jtableWidget_2->columnCount(); j++) { - //高度 + //宽度 iWidth += ui->tableWidget_2->columnWidth(j); } + // + bool bVisible = m_dock1->isVisible(); + //第一次显示,判断是否从json加载 + if(m_bHeadLoadJson) + { + m_bHeadLoadJson = false; + + QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 + //展示所有图头 + strHeadOrTail = "Head"; //Head代表图头, Tail代表成果表 + m_formMultiHeads->DisplayHeads(m_headsArray, strHeadOrTail); + //展示所有成果表 + strHeadOrTail = "Tail"; //Head代表图头, Tail代表成果表 + m_formMultiTails->DisplayHeads(m_tailsArray, strHeadOrTail); + } + m_dock1->show(); + m_dock2->show(); + + //----------------------------- + //头 + int iWidth_Head, iHight_Head; + m_formMultiHeads->getTableSize(iWidth_Head, iHight_Head); + QRect geoRect_FormHead = m_dock1->geometry(); + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), iWidth_Head, iHight_Head); + + //中间 + // 获取客户区几何信息(不含边框) + QRect geoRect = ui->centralwidget->geometry(); + qDebug() << "Geometry:" << geoRect.x() << "," << geoRect.y() + << "w:" << geoRect.width() << "h:" << geoRect.height(); //指标体系图 ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), iWidth, iHight); - QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + + //尾 + int iWidth_Tail, iHight_Tail; + m_formMultiTails->getTableSize(iWidth_Tail, iHight_Tail); + QRect geoRect_Tail = m_dock2->geometry(); + m_dock2->setGeometry(geoRect_Tail.x(), iHight+iHight_Head+40, iWidth_Tail, iHight_Tail); + //----------------------------- + + //QPixmap pPixmap = ui->centralwidget->grab(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); + int iMaxWidth = iWidth; + if(iWidth_Head>iWidth_Tail) + { + if(iWidth_Head>iWidth) + { + iMaxWidth = iWidth_Head; + } + } + else + { + if(iWidth_Tail>iWidth) + { + iMaxWidth = iWidth_Tail; + } + } + QPixmap pPixmap = this->grab(QRect(geoRect_FormHead.x(), geoRect_FormHead.y(), iMaxWidth, iHight+iHight_Head+iHight_Tail+40)); + //pPixmap.save(pngName); + + //恢复窗口 + m_dock1->setGeometry(geoRect_FormHead.x(), geoRect_FormHead.y(), geoRect_FormHead.width(), geoRect_FormHead.height()); + ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height()); + m_dock2->setGeometry(geoRect_Tail.x(), geoRect_Tail.y(), geoRect_Tail.width(), geoRect_Tail.height()); + if(!bVisible) + { + m_dock1->hide(); + m_dock2->hide(); + } // - QString strTmpPng = pngName; - int indTmp=strTmpPng.lastIndexOf("."); - if(indTmp>=0) strTmpPng=strTmpPng.left(indTmp) + "_tmp.PNG"; - pPixmap.save(strTmpPng); +// QString strTmpPng = pngName; +// int indTmp=strTmpPng.lastIndexOf("."); +// if(indTmp>=0) strTmpPng=strTmpPng.left(indTmp) + "_tmp.PNG"; +// pPixmap.save(strTmpPng); +// QImage image; +// image.load(strTmpPng); QSvgGenerator generator; generator.setFileName(pngName); // 设置输出SVG文件的路径和名称 - generator.setSize(QSize(ui->centralwidget->width(), ui->centralwidget->height())); // 设置SVG的尺寸,这里使用QPixmap的尺寸 - generator.setViewBox(QRect(0, 0, ui->centralwidget->width(), ui->centralwidget->height())); // 设置视图框,可选,根据需要设置 + generator.setSize(QSize(iMaxWidth, iHight+iHight_Head+iHight_Tail+40)); // 设置SVG的尺寸,这里使用QPixmap的尺寸 + generator.setViewBox(QRect(0, 0, iMaxWidth, iHight+iHight_Head+iHight_Tail+40)); // 设置视图框,可选,根据需要设置 - QImage image; - image.load(strTmpPng); // float sx=1; float sy=1; @@ -2539,21 +2718,10 @@ void MainWindowCurve::s_SaveAsSvg() painter.begin(&generator); painter.setRenderHint(QPainter::Antialiasing); painter.scale(sx,sy); - //painter.drawPixmap(0, 0, pPixmap); // 绘制QPixmap到SVG中 - painter.drawImage(0, 0, image); + painter.drawPixmap(0, 0, pPixmap); // 绘制QPixmap到SVG中 + //painter.drawImage(0, 0, image); painter.end(); // 结束绘制过程 -// float sx=1; -// float sy=1; -// QPainter painter; -// painter.begin(&generator); -// painter.setRenderHint(QPainter::Antialiasing); -// painter.scale(sx,sy); -// painter.drawPixmap(0, 0, pPixmap); // 绘制QPixmap到SVG中 -// painter.end(); // 结束绘制过程 - - //恢复窗口 - ui->centralwidget->setGeometry(geoRect.x(), geoRect.y(), geoRect.width(), geoRect.height()); } //void MainWindowCurve::s_Open(QString fileFull)