输出图片\pdf\svg中,追加图头、尾部结果部分。
This commit is contained in:
parent
02a218c0fb
commit
a74b15aa18
|
|
@ -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; i<ui->tableWidget->rowCount(); i++)
|
||||
{
|
||||
//高度
|
||||
iHight += ui->tableWidget->rowHeight(i);
|
||||
}
|
||||
|
||||
for(int j=0; j<ui->tableWidget->columnCount(); j++)
|
||||
{
|
||||
//高度
|
||||
iWidth += ui->tableWidget->columnWidth(j);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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代表成果表
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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; j<ui->tableWidget_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; i<ui->tableWidget_2->rowCount(); i++)
|
||||
{
|
||||
//高度
|
||||
iHight += ui->tableWidget_2->rowHeight(i);
|
||||
}
|
||||
//ui->tableWidget_2->setRowHeight(1, iHight+200);
|
||||
//iHight += 3000;
|
||||
|
||||
for(int j=0; j<ui->tableWidget_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; i<ui->tableWidget_2->rowCount(); i++)
|
||||
{
|
||||
//高度
|
||||
iHight += ui->tableWidget_2->rowHeight(i);
|
||||
}
|
||||
//ui->tableWidget_2->setRowHeight(1, iHight+200);
|
||||
//iHight += 3000;
|
||||
|
||||
for(int j=0; j<ui->tableWidget_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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user