QT6中QPrintPreviewWidget控件功能与应用
一.概述
1.简介
QPrintPreviewWidget 是 Qt 框架中用于实现打印预览功能的核心控件,隶属于 Qt Print Support 模块,主要用于在应用程序中提供文档打印前的可视化预览,支持用户在打印前查看效果、调整页面设置并直接触发打印操作。
它简化了打印工作流,是需要打印功能的 Qt 应用(如文本编辑器、报表工具、图像处理器等)的重要组件。
2.核心功能
QPrintPreviewWidget 的核心能力围绕 “打印预览” 展开,主要包括:
文档预览显示以分页形式展示待打印文档的精确效果,包括文本、图像、图形等内容的排版、尺寸适配(如纸张大小、边距),与实际打印输出一致。
交互操作支持:
页面导航:支持通过页码跳转、前后页切换查看多页文档。
缩放控制:提供放大(zoomIn())、缩小(zoomOut())、自适应窗口(fitToWidth()/fitInView())等缩放模式,方便查看细节。
页面旋转:支持 90°/180°/270° 旋转预览,适应不同排版需求。
页面设置联动:若关联了QPageSetupDialog,修改纸张大小、方向(横向 / 纵向)等设置后,预览会实时更新。
打印与导出:
直接触发打印操作(通过内置打印按钮或调用print()方法),可关联QPrintDialog让用户选择打印机和参数。
支持导出预览内容为 PDF(通过QPrinter的 PDF 输出功能实现)。
信号与事件响应提供丰富的信号(如pageChanged(int)、zoomChanged(qreal)),方便开发者监听用户操作(如页码切换、缩放变化)并自定义处理逻辑。
3.使用场景
文本编辑器:如记事本类应用,用户编辑完文本后,通过预览确认排版、分页是否合理。
报表生成工具:在生成统计报表、数据表格时,预览表格分页、表头 / 页脚位置,避免数据截断。
图像查看器:打印图片前,预览图片在纸张中的缩放比例、位置,确保打印不超出边界。
票据 / 标签打印:如快递面单、发票等格式化文档,预览内容对齐方式,避免打印错误。
二.代码示例
1.pro文件中: QT += printsupport # 核心模块 + 打印支持模块
2.引入模块与头文件
#include <QPrintPreviewWidget>
#include <QPrinter>
#include <QPainter>
3.创建预览控件并关联打印内容
QPrintPreviewWidget 需要知道 “预览什么内容”,这通过重写打印绘制逻辑实现。核心是关联paintRequested信号,在槽函数中使用QPainter绘制文档内容到QPrinter对象(预览的底层依赖QPrinter模拟打印输出)。
// 1. 用指针创建QPrintPreviewWidget实例(指定父对象便于内存管理)
QPrintPreviewWidget *previewWidget = new QPrintPreviewWidget(this);
// 2. 关联预览绘制信号:当需要渲染预览内容时触发
QObject::connect(previewWidget, &QPrintPreviewWidget::paintRequested,
[=](QPrinter *printer) { // 用lambda简化槽函数
QPainter painter(printer); // 画家对象,用于绘制内容到打印机(预览基于此)
int totalPages = 2; // 示例:2页文档
for (int page = 1; page <= totalPages; ++page) {
if (page > 1) {
printer->newPage(); // 新增一页(第一页无需调用)
}
// 绘制当前页内容(简单文本示例)
painter.drawText(100, 200, QString("这是第 %1 页的预览内容").arg(page));
painter.drawText(100, 300, "QPrintPreviewWidget 最简示例");
}
}
);
// 3. 设置预览窗口基本属性
previewWidget->setWindowTitle("打印预览");
previewWidget->resize(600, 400); // 窗口大小 //方法一