最近项目要加一个打印设置,查了下Qt打印机的调用方法,主要用到下面的类QPrinter, QPrintDialog;
初步的打印机调用demo:
ps: 首先要在qt的.pro文件中添加打印机支持:
QT += printsupport
QPrinter printer(QPrinter::ScreenResolution);
QPrintDialog* printDialog = new QPrintDialog(&printer, 0);
if (printDialog->exec() == QDialog::Accepted) {
QImage img(path);
QPainter painter(&printer);
painter.drawImage(0, 0, img);
painter.end();
}
delete printDialog
----------------------------------------------------------------------
上个打印机对话框截图:
QPrinter类的文档:
QPrinter类是用来在打印机上进行绘制的一个绘制设备。
这个设备代表了多页的打印输出,它和其他的绘制设备类如QWidget和QPixmap的使用方式类似。额外的用来管理特定的设备的特性也有提供,如方向,分辨率,遍历文档的页面在文档生成之后等。
在Windows或者OS X上面直接向打印机打印,QPrinter使用内置的打印机驱动。在X11上面,QPrinter一般使用Common Unix Printing System (CUPS) 来发送pdf 的输出给打印机。也可以换一种方式,调用 printProgram() 可以使用特定的命令或者设施替代系统默认打印方式。
注意一些设置参数:
- 纸张大小(默认的是A4)
- 分辨率
看看这些参数是否在打印机上是有效的设置,你可以通过QPrinter::isValid()来判断。
QPrinter 支持很多参数的设置,大多数的可以通过print dialog来进行修改。一般QPrinter传递这个参数给底层的QPrintEngine.
最重要的参数有:
- setOrientation() tells QPrinter which page orientation to use.
- setPaperSize() tells QPrinter what paper size to expect from the printer.
- setResolution() tells QPrinter what resolution you wish the printer to provide, in dots per inch (DPI).
- setFullPage() tells QPrinter whether you want to deal with the full page or just with the part the printer can draw on.
- setCopyCount() tells QPrinter how many copies of the document it should print.
当QPainter::begin()被调用,QPrinter会准备新的预打印也。你需要调用newPage()在QPainter::begin()之后,如果你需要在打印前插入空白页。同样的,在上一页文档打印完时调用newPage()将会返回一个追加到文档后面的空白页。
如果你想终止打印,abort()将会尽最大的可能停止打印。它有可能会取消以完成的或完成部分的打印工作。
自从QPrint可以向任意的QPrintEngine子类使用打印,因此通过子类化QPrintEngine和实现它的接口来扩展打印支持,使其能够覆盖新的类型的打印子系统成为可能。
---------------------------------------------------------
QPrintDialog这个类就是用来设置打印机参数的对话框。
这个对话框允许用户改变文档相关的设置,例如纸张的大小和方向,打印的色彩(黑白或彩色),打印范围,打印份数等。
控件还提供了用户选择可用的打印机,包括任何配置的网络打印机。