QT 保存scrollArea中全部内容为图片(另附保存Group或者frame中的内容为图片)

目的

  • 因为需要打印页面内容为报表,其实部分内容太复杂,所以当前我选择的办法是保存需要打印的部分为PNG图片,然后利用富文本编辑器读取html文字,然后插入图片进行打印

保存scrollArea中全部内容为图片

QString mainWindow::getScrollArea()
{
	QImage img(ui->scrollAreaWidgetContents->size(), QImage::Format_ARGB32_Premultiplied);
	//实测这一步如果是scrollArea的话,会保存出一张scrollArea界面包含滚动条的图片,不是期望的全部图片
	img.fill(Qt::transparent);

	QPainter painter(&img);
	painter.setRenderHint(QPainter::Antialiasing, true);
	painter.setRenderHint(QPainter::TextAntialiasing, true);
	painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
	ui->scrollAreaWidgetContents->render(&painter);
	painter.end();
	auto current_path = QCoreApplication::applicationDirPath() + "/data/print_support/";//获取当前所在路径
	QString file_path_name = current_path + "scroll_area.png";
	if (img.save(file_path_name, "PNG"))
	{
		qDebug() << "保存成功";
		return file_path_name;//保存成功返回保存文件的路径,可以用于打印
	}
	else
	{
		qDebug() << "保存失败";
		return NULL;
	}
	
}

保存Group或者frame中的内容为图片

QString mainWindow::getPrintArea()
{
	auto current_path = QCoreApplication::applicationDirPath() + "/data/print_support/";//获取当前所在路径
	QRect rect = ui->groupBox->geometry();//需要打印的部分 也可以是frame
	QPixmap p = this->grab(QRect(rect.x(), rect.y(), rect.width(), rect.height()));
	QString file_path_name = current_path + "group_area";
	file_path_name += ".png";
	if (!p.save(file_path_name, "png"))
	{
		return nullptr;
	}
	return file_path_name;//保存成功返回保存文件的路径,可以用于打印
}

之后有时间来写写利用html打印页面的方法。
保存widget中部分内容的方法参考下面文章,感谢作者!
利用QT实现截屏的四种方法

你可能感兴趣的:(QT 保存scrollArea中全部内容为图片(另附保存Group或者frame中的内容为图片))