Qt Print Support:常见用法解释

文章目录

  • 1、相关的类
  • 2、打印机设置功能 QPrintDialog
  • 3、打印页面设置对话框 QPageSetupDialog
  • 4、打印预览与配置的对话框 QPrintPreviewDialog
  • 5、预览打印机输出的页面布局 QPrintPreviewWidget
  • 6、打印机的信息类 QPrinterInfo
  • 7、QPrintEngine 类
  • 8、QPdfWriter 类

Qt Print Support

Qt为打印功能提供了广泛的跨平台支持。使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机上,也可以通过网络打印到远程打印机上。QT的打印系统还支持PDF文件生成,为基本报表生成设施提供基础。

1、相关的类

Qt Print Support:常见用法解释_第1张图片

所有类中代表可打印机设备的就是 QPrinter ,其他所有的控件都是对打印机进行设置(比如:选择打印机、纸张大小、纸张来源等),以及提供打印机信息的帮助类。

QPDFWriter 是另外一个可分页的绘制设备,与这个打印机体系不匹配。

QPrinter 继承了 QPagedPaintDevice 表示 支持多页/分页打印,本身也是可绘制设备,所以很容易就想到QPainter来直接绘制,分页使用 QPrinter::newPage() 函数。

2、打印机设置功能 QPrintDialog

2.1) 构造一个QPrinter

2.2)为 QPrinter 安装配置对话框 QPrintDialog

2.3)设置打印机选项

2.4)使用 QPainter 绘制一个 3 页的文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPrinter printer;       // 定义一个打印机

    QPrintDialog dialog(&printer);  // 打印机的配置对话框

    int ret = dialog.exec ();       // 执行配置对话框

    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;

    QPainter painter(&printer);     // 加上画家

    for (int i = 0; i < 3; ++i) {
        painter.fillRect (0,0,100,100,Qt::red);
        if(i < 2)       // 最后不需要空白页
            printer.newPage();      // 添加新页
    }

    painter.end ();     // 结束绘制

    return 0;
}

Qt Print Support:常见用法解释_第2张图片

打印结果:

Qt Print Support:常见用法解释_第3张图片

3、打印页面设置对话框 QPageSetupDialog

在上面的代码 加入设置打印页面功能,页面设置也可以设置横排和竖排。

3.1)定义页面设置对话框 QPageSetupDialog(QPrinter)

3.2)执行页面设置对话框,边距设置20mm
Qt Print Support:常见用法解释_第4张图片

Qt Print Support:常见用法解释_第5张图片

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPrinter printer;       // 定义一个打印机

    QPrintDialog dialog(&printer);  // 打印机的配置对话框

    int ret = dialog.exec ();       // 执行配置对话框

    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;


    QPageSetupDialog pageDialog(&printer);      // 打印机的页面设置对话框
    ret = pageDialog.exec ();
    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;

    QPainter painter(&printer);     // 加上画家

    for (int i = 0; i < 3; ++i) {
        painter.fillRect (0,0,100,100,Qt::red);
        if(i < 2)       // 最后不需要空白页
            printer.newPage();      // 添加新页
    }

    painter.end ();     // 结束绘制

    return 0;
}

4、打印预览与配置的对话框 QPrintPreviewDialog

当需要生成一组预览页时,可以使用打印预览与配置的对话框 QPrintPreviewDialog。

该预览对话框 将自动发出 paintRequested(QPrinter *printer) 信号。连接这个信号到绘制函数。使用与实际打印完全相同的代码,包括QPrinter::newPage() 启动新页面函数。

3.1)为打印机安装 打印预览与配置对话框 QPrintPreviewDialog

3.2)连接 paintRequested(QPrinter *printer)

3.3)QPrintPreviewDialog 执行。

为了方便调用,把绘制函数的代码 模块化成一个绘制函数 ,比如:void paintFun(QPrinter *printer)。

完整代码如下:

#include "MainWindow.h"
#include 
#include 

void paintFun(QPrinter *printer){
    QPainter painter(printer);     // 加上画家

    for (int i = 0; i < 3; ++i) {
        painter.fillRect (0,0,100,100,Qt::red);
        if(i < 2)       // 最后不需要空白页
            printer->newPage();      // 添加新页
    }

    painter.end ();     // 结束绘制
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPrinter printer;       // 定义一个打印机

    QPrintDialog dialog(&printer);  // 打印机的配置对话框

    int ret = dialog.exec ();       // 执行配置对话框

    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;


    QPageSetupDialog pageDialog(&printer);      // 打印机的页面设置对话框
    ret = pageDialog.exec ();
    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;


    QPrintPreviewDialog preDialog(&printer);    // 打印预览与设置对话框
    QObject::connect (&preDialog,&QPrintPreviewDialog::paintRequested, paintFun);// 连接信号槽
    ret = preDialog.exec ();        // 执行,此时就能看到预览页面了,也可以设置相关的打印机配置
    if(ret == QDialog::Rejected )   // 拒绝就返回
        return 0;

    paintFun (&printer);            // 调用绘制函数进行实际的绘制


    return 0;
}

Qt Print Support:常见用法解释_第6张图片

5、预览打印机输出的页面布局 QPrintPreviewWidget

QPrintPreviewWidget类用于预览打印机输出的页面布局。外观如下,只有一个显示页面,没有其他的操作按钮,可以提供略缩图功能。也有一个 paintRequested(QPrinter *printer) 信号,用法和预览对话框一样。

Qt Print Support:常见用法解释_第7张图片

6、打印机的信息类 QPrinterInfo

这个和QPrinter的关系 如果 QFileInfo 和 QFile 的关系。具体用法可以参考官档,无须深究。

7、QPrintEngine 类

QPrintEngine类定义了QPrinter如何与给定打印子系统交互的接口。多用于创建自己的打印引擎,可以略过。

8、QPdfWriter 类

QPDFWriter 是另外一个可分页的绘制设备,不属于printsupport模块,另外分析。

你可能感兴趣的:(#,Qt,案例,qt)