截图指定区域图片并导出至PDF文件

该代码段展示了如何使用Qt库中的QPixmap和QPrinter类来抓取应用程序界面的指定区域,并将截图保存为PDF文件。过程中解决了控件隐藏的问题,并在PDF中添加了时间戳和额外的文字信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导出效果:
在这里插入图片描述
在这里插入图片描述

void QTabTreatVerifyPanel::ExportShotScreenSlot(QString path)
{
//m_pixmap = QPixmap::grabWindow(winId(), 338, 460, 652, 455);//截取界面指定区域图像

/*此种方法有可能会导致软件界面上部分控件被隐藏*/
//QScreen* screen = QGuiApplication::primaryScreen();
//m_pixmap = screen->grabWindow(this->winId(), 338, 460, 652, 455);//截取界面指定区域图像
//ui.label->setPixmap(m_pixmap.scaled(ui.label->size()));//将所截图显示在label中

/*此种方法可解决控件隐藏问题*/
m_pixmap = this->grab(QRect(338, 460, 652, 455));

QDateTime dateTime = QDateTime::currentDateTime();				//当前日期和时间
QString ExportTime = dateTime.toString("yyyyMMddhhmmsszzz");	//导出时间
/***************************************************************/
QString pdfPath = path + ExportTime + "ExoprtShotScreenFile.pdf";//导出路径
	
QPrinter printer_html;
printer_html.setPageSize(QPrinter::A4);
printer_html.setOutputFormat(QPrinter::PdfFormat);
printer_html.setOutputFileName(pdfPath);

QPainter painter_pixmap;
painter_pixmap.begin(&printer_html);
/*QRect rect = painter_pixmap.viewport();
int multiple = rect.width() / m_pixmap.width();
qDebug() << "mul = " << multiple;*/
//painter_pixmap.scale(multiple, multiple + 1); // 缩放比例


painter_pixmap.setPen(Qt::black);
painter_pixmap.setFont(QFont("Arial", 30));
painter_pixmap.drawText(QRect(60,70,652,50), Qt::AlignCenter, QStringLiteral("温度图数据"));
painter_pixmap.drawPixmap(60, 150, m_pixmap);//绘制截图

printer_html.newPage();
painter_pixmap.resetTransform();
QString sTime2 = QStringLiteral("序号") + "        " + QStringLiteral("图像时间") + "        " + QStringLiteral("焦点温度") + "        " + QStringLiteral("头皮温度");

painter_pixmap.setPen(Qt::black);
painter_pixmap.setFont(QFont("Arial", 10));
painter_pixmap.drawText(QRect(60, 70, 652, 20), Qt::LeftToRight, sTime2);


painter_pixmap.setFont(QFont("Arial", 8));
int count = 0;

for (int i = 0; i < m_vCurveDataSkin.size(); i++)
{
	count++;
	if (count % 64 == 0)
	{
		printer_html.newPage();
		painter_pixmap.resetTransform();
	}
	QString sTime3 = QString::number(count) + "                " + m_vAcqTimes.at(i).left(8) + "                " + QString::number(m_vCurveData.at(i), 'f', 2) + QStringLiteral("℃") + "                " + QString::number(m_vCurveDataSkin.at(i), 'f', 2) + QStringLiteral("℃");
	painter_pixmap.drawText(QRect(60, 80 + (count % 64) * 15, 652, 15), Qt::LeftToRight, sTime3);
}

painter_pixmap.end();

m_pDlgTemperatureCurveSet->show();
//QDesktopServices::openUrl(QUrl::fromLocalFile(pdfPath));//显示PDF文件	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值