
点击上方蓝字关注我们


QT5支持打印机的相关类如下:
QPrinter类是在打印机上绘制的绘图设备。
QPrintDialog类提供了一个用于指定打印机配置的对话框。
QPrintPreviewDialog类提供了一个对话框,用于预览和配置打印机输出的页面布局。
|
15.1 QPrinter类 头文件 :#include <QPrinter>
qmake :QT += printsupport
继承类 :QPagedPaintDevice
|
15.1.1 QPrinter类功能详细介绍
QPrinter类是在打印机上绘制的绘图设备。
该设备代表一系列打印输出页面,其使用方式与QWidget和QPixmap等其他绘图设备几乎完全相同。提供了一组附加功能来管理特定于设备的功能,例如方向和分辨率,以及在生成文档时逐步浏览页面。
在Windows或macOS上直接打印到打印机时,QPrinter使用内置的打印机驱动程序。在X11上,QPrinter使用通用Unix打印系统(CUPS)将PDF输出发送到打印机。作为替代方法,printProgram()函数可用于指定要使用的命令或实用程序,而不是系统默认值。
请注意,未定义在无效打印机上设置纸张大小和分辨率等参数。在更改任何参数之前,你可以使用QPrinter :: isValid()来验证这一点。
QPrinter支持许多参数,大多数参数可由最终用户通过打印对话框进行更改。通常,QPrinter将这些函数传递给底层的QPrintEngine。
最重要的参数是:
setOrientation()告诉QPrinter要使用哪个页面方向。
setPaperSize()告诉QPrinter打印机需要什么样的纸张尺寸。
setResolution()告诉QPrinter你希望打印机提供的分辨率,以每英寸点数(DPI)为单位。
setFullPage()告诉QPrinter你是要处理整页还是只打印打印机可以绘制的部分。
setCopyCount()告诉QPrinter它应该打印多少份文档。
许多这些函数只能在实际打印开始之前调用(即,在调用QPainter :: begin()之前)。 这通常是有道理的,因为,例如,当你打印一半时,无法更改份数。 用户也设置了一些设置(通过打印机对话框),并且应该遵守应用程序。 有关更多详细信息,请参阅QAbstractPrintDialog的文档。
当调用QPainter :: begin()时,它操作的QPrinter准备用于新页面,使QPainter能够立即用于绘制文档中的第一页。绘制完第一页后,可以调用newPage()来请求绘制新的空白页,或者可以调用QPainter :: end()来完成打印。第二页和所有后续页面是在绘制之前使用对newPage()的调用准备的。
文档中的第一页不需要在调用newPage()之前。如果需要在打印文档的开头插入空白页,则只需要在QPainter :: begin()之后调用newPage()。类似地,在绘制文档的最后一页之后调用newPage()将导致在打印文档的末尾附加尾随空白页。
如果要中止打印作业,abort()将尽力停止打印。它可能取消整个工作或仅取消其中的一部分。
由于QPrinter可以打印到任何QPrintEngine子类,因此可以通过继承QPrintEngine并重新实现其接口来扩展打印支持以覆盖新类型的打印子系统。
另请参见QPrintDialog和Qt打印支持。
15.1.2 设置虚拟打印的文档名称 在X11上,文档名称用作QPrintDialog中的默认输出文件名。
请注意,如果打印机正在打印到文件,则文档名称不会影响文件名。 使用setOutputFile()函数。
void QPrinter::setDocName(const QString &name)
QString QPrinter::docName() const
|
15.2 QPrintDialog类 头文件:#include <QPrintDialog>
qmake :QT += printsupport
继承 :QAbstractPrintDialog
|
15.2.1 QPrintDialog类功能详细介绍 QPrintDialog类提供了一个用于指定打印机配置的对话框。
该对话框允许用户更改与文档相关的设置,例如纸张尺寸和方向,打印类型(彩色或灰度),页面范围和要打印的份数。
还提供了控件,使用户可以从可用的打印机中进行选择,包括任何已配置的网络打印机。
通常,QPrintDialog对象使用QPrinter对象构造,并使用exec()函数执行。
QPrintDialog printDialog(printer, parent);
if (printDialog.exec() == QDialog::Accepted) {
// print ...
}
|
如果用户接受该对话框,则正确配置QPrinter对象以进行打印。
完整示例代码r如下:
void MainWindow::filePrint()
{
// 创建打印机对象
QPrinter printer;
//设置打印机虚拟打印时保存的名称 (使用本地系统时间当做字符串名称)
printer.setDocName(QDateTime::currentDateTime().toString());
// 创建打印对话框
QString printerName = printer.printerName();
if(printerName.size() == 0)
return;
QPrintDialog dlg(&printer, this);
//如果编辑器中有选中区域,则打印选中区域
if(ui->textEdit->textCursor().hasSelection())
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
//如果在对话框中按下了打印按钮,则执行打印操作
if (dlg.exec() == QDialog::Accepted)
{
ui->textEdit->print(&printer);
}
}
|
运行效果:


打印机对话框可以访问常见的打印属性。 在使用CUPS打印系统的X11平台上,可以通过对话框的“属性”按钮修改每个可用打印机的设置。
在Windows和macOS上,使用本机打印对话框,这意味着不会遵守对话框中设置的某些QWidget和QDialog属性。 macOS上的本机打印对话框不支持设置打印机选项,即setOptions()和setOption()无效。
在Qt 4.4中,可以使用静态函数在macOS上显示工作表。 Qt 4.5不再支持此功能。 如果你需要此功能,请使用QPrintDialog :: open()。
另请参见QPageSetupDialog和QPrinter。
15.2.2 开始执行对话框 从QDialog :: exec()重新实现。
15.3 QPrintPreviewDialog类 头文件:#include <QPrintPreviewDialog>
qmake :QT += printsupport
继承 :QDialog
|
15.3.1 QPrintPreviewDialog类详细介绍 QPrintPreviewDialog类提供了一个对话框,用于预览和配置打印机输出的页面布局。
在现有应用程序中使用QPrintPreviewDialog非常简单:
1. 创建QPrintPreviewDialog。
你可以使用现有的QPrinter对象构造QPrintPreviewDialog,也可以让QPrintPreviewDialog为你创建一个,这将是系统默认的打印机。
2. 将paintRequested()信号连接到插槽。
当对话框需要生成一组预览页面时,将发出paintRequested()信号。 您可以使用与实际打印完全相同的代码来生成预览,包括调用QPrinter :: newPage()以在预览中启动新页面。 将一个插槽连接到paintRequested()信号,在该信号上绘制传递到插槽的QPrinter对象。
3. 调用exec()。
调用QPrintPreviewDialog :: exec()以显示预览对话框。
另请参见QPrinter,QPrintDialog,QPageSetupDialog和QPrintPreviewWidget。
15.3.2 示例代码 // 打印预览
void MainWindow::doPrintPreview()
{
QPrinter printer;
//设置打印机虚拟打印时保存的名称 (使用本地系统时间当做字符串名称)
printer.setDocName(QDateTime::currentDateTime().toString());
// 创建打印预览对话框
QPrintPreviewDialog preview(&printer,this);
// 当要生成预览页面时,发射paintRequested()信号
connect(&preview, SIGNAL(paintRequested(QPrinter*)),
this,SLOT(printPreview(QPrinter*)));
preview.setWindowTitle("打印预览窗口"); //设置预览窗口的名称
preview.exec();
}
void MainWindow::printPreview(QPrinter *printer)
{
ui->textEdit->print(printer);
}
|
运行效果图:

图15.1 打印预览效果图
 技术合作与咨询
QQ:1126626497 关注我长按二维码可识别微信号:xl1126626497

---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:DS小龙哥 嵌入式技术资讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ----------------------------------------------------------------------------------------------------------------------
|