Qt Graphics-View的打印功能实现
本文来研究一下Qt Graphics-View的打印功能实现。
在Qt的官方文档中介绍了Graphics-View的打印相关内容。

Qt中对打印的支持是有一个独立的printsupport模块来完成的,所以,要想在程序中使用Qt的打印功能,必须先在pro文件中添加下面这句代码:
QT += printsupport
图形视图通过它的展示函数:QGraphicsScene::render()和QGraphicsView::render()提供单线(single-line)打印。这些函数提供相同的API,通过将QPainter传递给展示函数,你可以打印场景、视图的全部或部分内容。例子显示了如何使用QPainter将场景的全部内容打印到整页纸上。
QGraphicsScene scene;
scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));
QPrinter printer;
if (QPrintDialog(&printer).exec() == QDialog::Accepted) {
QPainter painter(&printer);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
}
场景和视图函数展示函数的差异是一个在场景坐标,另一个在视图坐标。QGraphicsScene::render()常用于打印无变换的场景的全部内容,如画几何数据文档等。QGraphicsView::render()适合于打印屏幕快照(screenshots),缺省情况下,它展示视图端口中的当前内容。
QGraphicsScene scene();
scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));
//QPixmap pixmap; 官当文档这样是错误的,pixmap初始化为空,没空间可不行
QPixmap pixmap(scene->sceneRect().width(), scene->sceneRect().height());
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
painter.end();
pixmap.save("scene.png");
当源区域和目标区域的大小不匹配时,源内容进行伸展以适合目标区域。通过传递Qt::AspectRatioMode给你正调用的展示函数,你可以在源内容伸缩时,保持或忽略纵横比。
下面是我实验的代码,仅供参考。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
void MainWindow::printReview()
{ QPrinter printer(QPrinter::HighResolution); // 创建打印预览对话框 QPrintPreviewDialog preview(&printer, this, windowFlags() | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint); // 当要生成预览页面时,发射paintRequested()信号 connect(&preview, SIGNAL(paintRequested(QPrinter *)), this, SLOT(printPreview(QPrinter *))); preview.exec(); } void MainWindow::printPreview(QPrinter *printer) void MainWindow::printToPrinter() void MainWindow::printToImage() QString filePath = QFileDialog::getSaveFileName(this, "Save Image", pixmap.save(filePath); void MainWindow::printToPdf() QPainter painter; |
Qt Graphics-View的打印功能实现的更多相关文章
- 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题
之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...
- qt Graphics View Framework(非重点)
Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转. 说明;Graphics View ...
- Qt 之 Graphics View Framework 简介
Graphics View Framework 交互式 2D 图形的 Graphics View 框架概述.自 Qt4.2 中引入了 Graphics View,以取代其前身 QCanvas.Grap ...
- Qt 学习之路:Graphics View Framework
Graphics View 提供了一种接口,用于管理大量自定义的 2D 图形元素,并与之进行交互:还提供了用于将这些元素进行可视化显示的观察组件,并支持缩放和旋转.我们通常所说的 Linux 的 KD ...
- 浅谈QT打印功能实现
QT作为一款轻量级的集成开发环境,其设计的目标是使开发人员利用QT这个应用程序框架更加快速及轻易的开发应用程序.要达到此目的,要求QT必须能够跨平台,QT能够在32位及64位的Linux,MAC OS ...
- Qt 学习之路 2(30):Graphics View Framework
Qt 学习之路 2(30):Graphics View Framework 豆子 2012年12月11日 Qt 学习之路 2 27条评论 Graphics View 提供了一种接口,用于管理大量自定义 ...
- pyqt5 graphics view简单使用
Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...
- Graphics View框架
Qt4.2开始引入了Graphics View框架用来取代Qt3中的Canvas模块,并在很多地方作了改进,Graphics View框架实现了模型-视图结构的图形管理,能对大量图元进行管理,支持碰撞 ...
- Qt Model/View(官方翻译,图文并茂)
http://doc.trolltech.com/main-snapshot/model-view-programming.html 介绍 Qt 4推出了一组新的item view类,它们使用mode ...
随机推荐
- 第二阶段冲刺(个人)——five
今天的计划:优化登录.注册信息的填写判断. 昨天做了什么?做背景. 困难:无
- Arduino读取ph试剂浓度
https://detail.tmall.com/item.htm?id=600904840315&spm=a1z09.2.0.0.31cd2e8d1sb06V&_u=e1qf7bf5 ...
- Python面向对象 | 双下方法
定义:双下方法是特殊方法,他是解释器提供的.由双下划线+方法名+双下划线 .它具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更 ...
- 在eclipse中新建java问题报错:The type XXX cannot be resolved. It is indirectly referenced from required .class files
在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...
- No module named 'requests_toolbelt'
pip install requests-toolbelt
- 编译udf小软件(附视频教程)
小软件下载地址(不仅支持Visual Studio并且打包gcc,解压即可编译): https://pan.baidu.com/s/1XPfjfY8DC2KKS8gj1KhutQ 提取码: 6kju ...
- 【K8S】Kubernetes: --image-pull-policy always does not work
https://stackoverflow.com/questions/45905999/kubernetes-image-pull-policy-always-does-not-work
- .NetCore快速搭建ELK分布式日志中心
懒人必备:.NetCore快速搭建ELK分布式日志中心 该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...
- Spring+Spring+Hibernate环境搭建
源码地址:https://gitee.com/kszsa/ssht.git 一.引入lib包 pom.xml,引入需要的jar包 <?xml version="1.0" en ...
- SQL join 三种扩展用法
以前学习,只知道 LEFT JOIN.RIGHT JOIN.INNER JOIN.FULL JOIN,共四种集合,然而加上一些条件,可以组合成另外三种集合,直接上图.