1. Qt PDF生成技术演进:从QPrinter到QPdfWriter
在Qt4时代,开发者使用QPrinter类来生成PDF文件,这个设计初衷是为了打印而存在的类,意外地成为了当时PDF生成的主要工具。我记得第一次用QPrinter生成PDF时,感觉就像是用螺丝刀当锤子使 - 虽然能用,但总感觉不太对劲。
随着Qt5的发布,Qt团队引入了专门用于PDF生成的QPdfWriter类。这个变化不仅仅是简单的类名替换,而是整个设计理念的升级。QPdfWriter去掉了打印相关的冗余功能,专注于PDF生成,使得API更加简洁高效。
在实际项目中,我遇到过这样一个典型场景:一个医疗报告系统需要将患者检查结果输出为PDF。在Qt4环境下,我们不得不处理各种打印相关的参数,比如纸张来源、双面打印等完全用不到的功能。迁移到Qt5后,代码量减少了近30%,性能提升了约40%,这充分证明了专用工具的价值。
2. 跨版本迁移实战指南
2.1 模块配置差异
从Qt4迁移到Qt5/6时,第一个要注意的就是模块系统的变化。在Qt4中,QPrinter是QtGui模块的一部分,而在Qt5中,所有打印相关类都被移到了Qt Print Support模块。
我踩过的一个坑是:在.pro文件中忘记添加printsupport模块,结果编译时报了一堆莫名其妙的错误。正确的配置应该是:
QT += printsupport # 必须添加这行
在代码中包含头文件时也要注意变化:
// Qt4风格(已过时)
#include <QPrinter>
// Qt5/6正确方式
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPdfWriter>
2.2 API使用对比
让我们通过一个实际例子看看两种方式的区别。假设我们要生成一个简单的文本PDF:
Qt4 QPrinter方式 :
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("output.pdf");
QPainter painter(&printer);
painter.drawText(100, 100, "Hello Qt4 PDF");
painter.end();
Qt5 QPdfWriter方式 </

QT跨版本PDF生成:从QPrinter到QPdfWriter的迁移与实战&spm=1001.2101.3001.5002&articleId=101704888&d=1&t=3&u=b251ded5fcb94987aaa1769ee083d6dc)

被折叠的 条评论
为什么被折叠?



