QPrinter、QPrinterInfo、QPageLayout
QPrinter
一、描述
QPrinter 类是在打印机上绘制的绘制设备,其使用方式与其他绘图设备(如 QWidget 和 QPixmap)几乎完全相同。提供了一组附加功能来管理特定于设备的功能,例如方向、分辨率、在生成文档时逐步浏览文档中的页面。
在无效打印机上设置参数(如纸张尺寸和分辨率)是未定义的。可以在更改参数之前使用 isValid() 来验证。
QPrinter 支持许多参数,用户可以通过打印对话框更改大部分参数。许多函数只能在实际打印开始之前调用(即在调用 QPainter::begin() 之前)。
当 QPainter::begin() 被调用时,它所操作的 QPrinter 为新页面做好准备,使 QPainter 可以立即用于绘制文档的第一页。绘制完第一页后,可以调用 newPage() 来请求绘制新的空白页,或者可以调用 QPainter::end() 来完成打印。
二、类型成员
1、enum QPrinter::ColorMode:此枚举指示是否应进行彩色打印。
- Color:如果可用,则以彩色打印,否则以灰度打印。
- GrayScale:以灰度打印。
2、enum QPrinter::DuplexMode:此枚举用于指示是在每张纸的单面或双面打印。
- DuplexNone:仅单面打印。
- DuplexAuto:使用打印机的默认设置。
- DuplexLongSide:每张纸的两面都用于打印。在打印第二面之前将纸张翻转其最长边。
- DuplexShortSide:每张纸的两面都用于打印。在打印第二面之前将纸张翻转其最短边。
3、enum QPrinter::OutputFormat:此枚举用于描述打印的格式。
- NativeFormat:将使用运行平台定义的方法打印输出。
- PdfFormat:将其输出生成为 PDF 文件。
4、enum QPrinter::PageOrder:此枚举指示应用程序如何打印。
- FirstPageFirst:应首先打印最低编号的页面。
- LastPageFirst:应首先打印最高编号的页面。
5、enum QPrinter::PaperSource:此枚举指定要使用的纸张来源。QPrinter 不检查纸张来源是否可用,它只是使用这些信息来尝试设置纸张来源。是否设置纸张来源取决于打印机是否具有该特定来源。仅适用于 Windows。
- 略
6、enum QPrinter::PrintRange:此枚举用于指定打印范围选项。
- AllPages:应打印所有页面。
- Selection:只应打印选择的页面。
- PageRange:应打印指定的页面范围。
- CurrentPage:只打印当前页。
7、enum QPrinter::PrinterMode:此枚举描述了打印机工作的模式。
- ScreenResolution:将打印设备的分辨率设置为屏幕分辨率。即在打印机上绘制时获得的结果将与屏幕上的可见输出完全匹配。屏幕和打印机上的字体规格是相同的。这是默认值。 ScreenResolution 将产生比 HighResolution 更低质量的输出。
- HighResolution:在 Windows 上,将打印机分辨率设置为为正在使用的打印机定义的分辨率。对于 PDF 打印,将 PDF 驱动程序的分辨率设置为 1200 dpi。
8、enum QPrinter::PrinterState:打印状态。
- Idle:空闲
- Active:激活
- Aborted:中止
- Error:出错
9、enum QPrinter::Unit:此枚举用于指定页面和纸张尺寸的测量单位。
- Millimeter:毫米
- Point:点,定义为 1/72 英寸。
- Inch:英寸
- Pica
- Didot
- Cicero
- DevicePixel:取决于分辨率,并基于打印机上的实际像素或点。
三、成员函数
1、bool abort()
中止当前的打印运行。如果打印运行成功中止,则返回 true,并且 printerState() 将返回 Aborted;否则返回 false。
并非总是可以中止打印作业。例如,所有数据都已发送到打印机时打印机不能或不会在要求时取消作业。
2、int fromPage()
返回要打印的页面范围内第一页的编号。页面按照第一页为第 1 页的约定进行编号。
特殊值 0 则表示未设置。
如果 fromPage() 和 toPage() 都返回 0,表示将打印整个文档。
int toPage()
返回要打印的页面范围中最后一页的编号。
特殊值 0表示未设置“到页面”设置。
如果 fromPage() 和 toPage() 都返回 0,表示将打印整个文档。
3、bool isValid()
当前选择的打印机是否是系统中的有效打印机或是纯 PDF 打印机。
QPrinter printer;printer.setOutputFormat(QPrinter::PdfFormat);printer.setOutputFileName("/foobar/nonwritable.pdf");QPainter painter;if (! painter.begin(&printer)) {qWarning("打开文件失败,确定文件是否可写?");return 1;}painter.drawText(10, 10, "Test");if (! printer.newPage()) {qWarning("将页面刷新到磁盘失败,磁盘已满?");return 1;}painter.drawText(10, 10, "Test 2");painter.end();
4、bool newPage()
告诉打印机弹出当前页面并继续在新页面上打印。返回是否打印成功。
在不活动的 QPrinter 对象上调用 newPage() 总是会失败。
5、QRectF paperRect(QPrinter::Unit unit)
返回纸张的矩形。这通常比 pageRect() 大。
6、QPrinter::PrinterState printerState()
返回打印机的当前状态。可能并不准确(有的打印机没有向操作系统报告其状态的功能)。
7、void setCollateCopies(bool collate)
设置打印对话框出现时主动分页复选框的默认值。
QPrinter printer;printer.setCollateCopies(true);QPrintDialog dialog(&printer, nullptr);if (dialog.exec()){}
8、void setCopyCount(int count)
设置要打印的份数。打印机驱动程序读取此设置并打印指定份数。设置的值不能超过打印驱动程序允许的最大值。
9、void setCreator(const QString &creator)
设置创建文档的应用程序的名称。此功能仅适用于 X11 版本的 Qt。
10、void setDocName(const QString &name)
设置文档名称。文档名称用作输出文件的默认名称。如果打印机正在打印到文件,则设置不会影响文件名。
11、void setFontEmbeddingEnabled(bool enable) 【没搞明白怎么用的】
设置是否启用字体嵌入。
12、void setFromTo(int from, int to)
设置要打印的页面范围的默认值,其中 from 对应于范围中的第一页,to 对应于最后一页。
文档中的页面按照第一页为第 1 页的约定进行编号。但是,如果 from 和 to 都设置为 0,则将打印整个文档。
13、void setFullPage(bool fp)
如果 fp 为 true,则支持在整个页面上绘制;否则将绘制限制在设备的可打印区域。
禁用整页打印时 QPrinter 坐标系的原点与可打印区域的左上角重合。
如果启用整页打印,则 QPrinter 坐标系的原点与纸张本身的左上角重合。由于打印机的页边距,可能无法在整个物理页上打印,因此应用程序必须自己考虑页边距。
QPrinter printer;QPrintDialog dialog(&printer, nullptr);if (dialog.exec()){printer.setFullPage(true);QPageLayout layout = printer.pageLayout();layout.setPageSize(QPageSize(QPageSize::A4));layout.setMargins(QMarginsF(30,30,30,30));printer.setPageLayout(layout);QPainter painter(&printer);painter.drawText(QRect(0,0,500,500), tr("黄河之水天上来"));}
QPrinter printer;QPrintDialog dialog(&printer, nullptr);if (dialog.exec()){printer.setFullPage(true);QPageLayout layout = printer.pageLayout();layout.setPageSize(QPageSize(QPageSize::A4));
// layout.setMargins(QMarginsF(30,30,30,30));printer.setPageLayout(layout);QPainter painter(&printer);painter.drawText(QRect(0,0,500,500), tr("黄河之水天上来"));}
QPrinter printer;QPrintDialog dialog(&printer, nullptr);if (dialog.exec()){printer.setFullPage(false);QPageLayout layout = printer.pageLayout();layout.setPageSize(QPageSize(QPageSize::A4));layout.setMargins(QMarginsF(30,30,30,30));printer.setPageLayout(layout);QPainter painter(&printer);painter.drawText(QRect(0,0,500,500), tr("黄河之水天上来"));}
14、void setOutputFileName(const QString &fileName)
设置输出文件的名称。
这可以改变 outputFormat() 的值。如果文件名带有“.pdf”后缀,则生成 PDF。如果文件名的后缀不是“.pdf”,则使用的输出格式是 setOutputFormat() 设置的格式。
QPrinter 默认使用 Qt 的跨平台 PDF 打印引擎。如果可以本机生成格式,例如 macOS 可以从其打印引擎生成 PDF,建议将输出格式设置回 NativeFormat。
15、void setPrintProgram(const QString &printProg)
设置应该执行打印作业的程序的名称。在 X11 上,此函数将程序设置为使用 PDF 输出调用。在其他平台上调用没有效果。
16、void setPrinterName(const QString &name)
设置打印机名称。
- 如果名称为空,则输出格式将设置为 PdfFormat。
- 如果名称不是有效的打印机,则不会进行任何更改。
- 如果名称是有效的打印机,则输出格式将设置为 NativeFormat。
17、void setResolution(int dpi)
要求打印机以 dpi 或尽可能接近 dpi 进行打印。
必须在 QPainter::begin() 之前调用才能有效。
18、bool supportsMultipleCopies()
打印机是否支持在一个作业中打印同一文档的多个副本。
19、QList<QPrinter::PaperSource> supportedPaperSources()
返回此打印机支持的纸张尺寸。此功能仅在 Windows 中可用。
这些值可以是与 QPrinter::PaperSource 枚举中的条目匹配的值,也可以是驱动程序特定值。驱动程序特定值大于在wingdi.h 中声明的常数 DMBIN_USER。
QPrinter printer;QPrintDialog dialog(&printer, nullptr);if (dialog.exec()){qDebug()<<printer.supportedPaperSources();//选择打印机后再输出此值QPainter painter(&printer);painter.drawText(QRect(0,0,500,500), Qt::AlignCenter | Qt::TextWordWrap, tr("黄河之水天上来"));}
20、QList<int> supportedResolutions()
返回打印机表示支持的分辨率列表(每英寸点数整数列表)。
21、bool newPage()
开始一个新页面。返回是否成功。
22、bool setPageLayout(const QPageLayout &newPageLayout)
设置页面布局。应该在调用 QPainter::begin() 之前调用它,或者在调用 newPage() 以将新页面布局应用到新页面之前调用它。
返回是否设置成功。
QPrinterInfo
一、描述
QPrinterInfo 类提供对现有打印机信息的访问。
二、成员函数
1、【static】QStringList availablePrinterNames()
返回此系统上所有可用打印机名称的列表。
2、【static】QList<QPrinterInfo> availablePrinters()
返回此系统上所有可用打印机的 QPrinterInfo 对象列表。
3、QPrinter::ColorMode defaultColorMode()
返回此打印机的默认颜色模式。
4、QPrinter::DuplexMode defaultDuplexMode()
返回此打印机的默认双面模式。
5、QPageSize defaultPageSize()
返回此打印机的当前默认页面大小。
6、【static】QPrinterInfo defaultPrinter()
返回系统上的默认打印机。
使用前应使用 isNull() 检查返回值,以防没有默认打印机。
在某些系统上,可能有可用的打印机,但它们都没有设置为默认打印机。
7、【static】QString defaultPrinterName()
返回当前的默认打印机名称。
8、QString description()
打印机的描述。
9、bool isDefault()
此打印机当前是否为默认打印机。
10、bool isNull()
此 QPrinterInfo 对象是否包含打印机定义。
11、bool isRemote()
返回此打印机是否为远程网络打印机。
12、QString makeAndModel()
打印机的品牌和型号。
13、QPageSize maximumPhysicalPageSize()
此打印机支持的最大物理页面大小。
QPageSize minimumPhysicalPageSize()
返回此打印机支持的最小物理页面大小。
14、【static】QPrinterInfo printerInfo(const QString &printerName)
根据名称获取打印机信息。
15、QString printerName()
返回打印机的名称。这是用于识别打印机的唯一 ID,可能不适合人类阅读。
16、QPrinter::PrinterState state()
返回此打印机的当前状态。
17、QList<QPrinter::ColorMode> supportedColorModes()
返回此打印机支持的颜色模式。
18、QList<QPrinter::DuplexMode> supportedDuplexModes()
返回此打印机支持的双面模式列表。
19、QList<QPageSize> supportedPageSizes()
返回此打印机支持的页面尺寸列表。
20、QList<int> supportedResolutions()
返回此打印机支持的分辨率列表。
21、bool supportsCustomPageSizes()
返回此打印机是否支持自定义页面尺寸。
QPageLayout
一、描述
此类描述了页面的大小、方向和边距。
二、类型成员
1、enum QPageLayout::Mode:此枚举定义页面布局模式
- StandardMode:绘制矩形包括边距,边距必须介于最小值和最大值之间。
- FullPageMode:绘制矩形不包括边距,边距可以是任意值,必须手动管理。
2、enum QPageLayout::Orientation:此枚举类型定义页面方向
- Portrait:页面大小以默认方向使用
- Landscape:页面大小旋转90度
3、enum QPageLayout::Unit:此枚举类型用于指定页面布局和边距的度量单位。
- Millimeter:毫米
- Point:1/72 英寸
- Inch
- Pica
- Didot
- Cicero
三、部分成员函数
1、QRectF fullRect()
返回当前布局单位中的整个页面矩形。
页面矩形考虑页面大小和页面方向,但不考虑页边距。
2、QRectF fullRect(QPageLayout::Unit units)
以所需单位返回整个页面矩形。页面矩形考虑页面大小和页面方向,但不考虑页边距。
3、QRect fullRectPixels(int resolution)
返回给定分辨率下以设备像素为单位的整页矩形。
页面矩形考虑页面大小和页面方向,但不考虑页边距。
4、QRect fullRectPoints()
返回以 Postscript Points(1/72 英寸)为单位的整页矩形。
页面矩形考虑页面大小和页面方向,但不考虑页边距。
5、bool isEquivalentTo(const QPageLayout &other)
当前页面布局是否与 other 等效,即大小、边距和方向都相等。
6、bool isValid()
当前页面布局是否有效。
7、QMarginsF margins(QPageLayout::Unit units)
使用请求的单位返回页面布局的边距。
8、QMargins marginsPixels(int resolution)
返回给定分辨率的页面布局的边距(以设备像素为单位)。
9、QMargins marginsPoints()
返回以 Postscript Points(1/72 英寸)为单位的页面布局的边距。
10、QMarginsF maximumMargins()
返回将应用的最大边距。最大边距 = 页面的完整大小 - 设置的最小边距。
11、QMarginsF minimumMargins()
返回页面布局的最小边距。
12、QPageSize pageSize()
返回页面布局的页面大小。
QPageSize 始终以纵向定义。要获得将设置方向考虑在内的大小,必须使用 fullRect()。
13、QRectF paintRect()
返回当前布局单位中的可绘制矩形。可绘制矩形考虑了页面大小、方向和边距。
14、QRectF paintRect(QPageLayout::Unit units)
以所需单位返回可绘制矩形。
15、QRect paintRectPixels(int resolution)
返回给定分辨率的圆形设备像素中的可绘制矩形。
16、QRect paintRectPoints()
返回以圆角 Postscript Points(1/72 英寸)为单位的可绘制矩形。
QPrinter、QPrinterInfo、QPageLayout相关推荐
- QWT6.14的编译、配置、使用(Qt Creator5.14.2)
文章目录 前言 一.下载安装 1. 下载 2.编译 二.配置与使用 1.配置 使用 2.编译遇到问题 参考文章: 前言 QWT, Qt Widgets for Technical Applicatio ...
- Qt菜单栏、工具栏、状态栏介绍及工具栏action的动态增删显示实现方式
Qt菜单栏.工具栏.状态栏介绍及工具栏action的动态增删显示实现方式 版本说明 版本 作者 日期 备注 0.1 loon 2018.11.12 初稿 目录 文章目录 Qt菜单栏.工具栏.状态栏介绍 ...
- linux qt 打印预览控件,Qt实现保存、浏览、预览、打印功能的示例代码
Qt提供了以文本.图片.HTML等方式来实现对文档的操作,主要用到了QPrinter类和QPainter类,用到了QFileDialog文件窗口.QPrintPreviewDialog预览窗口类和QP ...
- Qt实现保存、浏览、预览、打印功能
Qt提供了以文本.图片.HTML等方式来实现对文档的操作,主要用到了QPrinter类和QPainter类,用到了QFileDialog文件窗口.QPrintPreviewDialog预览窗口类和QP ...
- 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed
使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...
- 什么是原码、反码、补码?什么是按位与?范围数字按位与!
前言:学过计算机基础的大家都知道什么是二进制,什么是"与"运算,这里先给大家复习一下. 举一个简单的例子: 5的二进制表示是0101(补齐4位) 7的二进制表示是0111(补齐4位 ...
- 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
在对比oracle数据库和大数据库的时候,发现了几个用以存放数字的新的类型bigint.decimal.smallint.tinyint,为了对比之间的不同,我进行了统计 bigint 可以精确的表示 ...
- 【golang程序包推荐分享】go-ini、viper、godoc
[golang程序包推荐&分享]go-ini.viper.godoc 一.go-ini 1.程序包简介 2.下载安装 3.简单使用[截取自官网] 二.viper 1.程序包简介 2.下载安装 ...
- Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...
最新文章
- Hrefer教程【超越官方】
- DLL技术应用04 - 零基础入门学习Delphi47
- 我的世界java路径_我的世界java路径在哪 路径有误怎么设置
- java 基础(匿名内部类)
- android多线程下载图片
- 小波降噪与重构例子 python
- 七牛上传图片html,MWEB+七牛 上传图片
- Java中int和Integer的区别
- python画互动图_利用Python画出运动图像
- Java 程序读取properties文件
- Java 设计模式 Factory Method 工厂方法 模式
- Dev-C++/Cpp使用入门详解
- 【自动驾驶】模型预测控制(MPC)实现轨迹跟踪
- 红帽linux命令符,红帽子Linux_命令全解.doc
- Linux家目录被误删除恢复
- 梦雨百度网盘机器人好友群组消息自动回复软件(可用于自动发货场景)
- python中什么是不等长编码_2021学堂云计算机科学和Python编程导论(自主模式)期末答案...
- android为什么会用流量,手机流量为什么会偷跑?
- 常见面试题(无答案)
- 施一公 学生如何提高专业英文阅读能力
热门文章
- BI解析,告诉你企业为什么选择商业智能BI?
- 4 月答题挑战,得限量勋章赢现金 - 参与得“赏金”
- Windows核心编程笔记(8)
- 2019年9月计算机一级试题,2019年9月计算机一级Ms Office试题(4)
- Android 各种截屏方法
- Linux系统的介绍及安装
- TiDB数据库schema设计之表结构设计
- oracle ebs应收贷记,【转】Oracle EBS 详解EBS接口开发之应收款处理
- Git push错误,Unauthorized fatal: Could not read from remote repository.未验证不能提交
- python散点图中如何添加拟合线并显示拟合方程与R方?