QT的打印机相关的类需要使用printsupport库,其实底层都是使用cups进行打印的。

QT       += core gui printsupport

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPrinter>
class QPushButton;
class QHBoxLayout;
class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();QHBoxLayout *m_mainLayout;QWidget *m_main;QPushButton *m_btn;public slots:void clickPrinter();void slotPrintReviewPaint(QPrinter *printer);
};#endif  // MAINWINDOW_H
QPrinter中有很多属性可以设置,但是有些打印机可能不支持这些设置,导致打印预览有很多问题。

mainwindow.cpp

#include "mainwindow.h"
#include <QPushButton>
#include <QWidget>
#include <QHBoxLayout>
#include <QPrinter>
#include <QPainter>
#include <QPrintPreviewDialog>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), m_mainLayout(new QHBoxLayout(this)), m_main(new QWidget(this)), m_btn(new QPushButton("打印预览", m_main)){m_main->setLayout(m_mainLayout);m_mainLayout->addWidget(m_btn);connect(m_btn, &QPushButton::clicked, this, &MainWindow::clickPrinter);setCentralWidget(m_main);
}void MainWindow::clickPrinter()
{QPrinter printer;//----------------- 设置打印机属性 -------------// 打印预览不生效printer.setDuplex(QPrinter::DuplexLongSide);printer.setPageSize(QPrinter::A3);// 打印预览生效printer.setDoubleSidedPrinting(true);printer.setOrientation(QPrinter::Landscape);printer.setNumCopies(5);printer.setFromTo(2, 5);QPrintPreviewDialog pdlg(&printer);// 打印绘制消息connect(&pdlg, SIGNAL(paintRequested(QPrinter *)),SLOT(slotPrintReviewPaint(QPrinter *)));pdlg.exec();
}void MainWindow::slotPrintReviewPaint(QPrinter *printer)
{QPainter p(printer);int pageNum = 5;for (int i = 0; i < pageNum; i++) {if (i != 0) printer->newPage();  // 支持多页打印p.drawText(100, 100, "asdfa" + QString::number(i));}
}MainWindow::~MainWindow() {}

函数slotPrintReviewPaint(QPrinter *printer)很重要,你想要打印机的数据都可以在这里进行绘制,

最终你绘制的内容都会被打印出来。

QPrinter::newPage()用来新建一个页面。

git传送门

QPrintPreviewDialog 打印预览使用实例相关推荐

  1. java 打印预览_java打印和打印预览机制实例代码

    代码如下: import java.awt.basicstroke; import java.awt.borderlayout; import java.awt.color; import java. ...

  2. .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现

    原文:.NET环境下有关打印页面设置.打印机设置.打印预览对话框的实现 我个人认为,开发MIS,首先就得解决网格的问题,而开发工具为我们提供了如DataGrid.MSHFlexGrid的控件.其次,是 ...

  3. 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距

    1.控制"纵打". 横打"和"页面的边距 (1) <object  id="factory"  style="display ...

  4. 1.关于QT中的Graphics绘图,定时器,动画,将窗口中的内容打印到图片上,打印机,打印预览

     1 新建项目 A  修改pro中的内容如下: HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets prints ...

  5. printdocument python_python学习笔记之wxpython打印预览

    主要学习wxPython in action 和Demo程序,做点学习笔记 wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它 ...

  6. TML 打印预览问题,怎么设置有些内容不出现在打印预览页面上。怎么控制,有下代码 看得不是很懂 求解释...

    HTML <style> 标签的 media 属性 HTML <style> 标签 实例 针对两种不同媒介类型的两种不同的样式(计算机屏幕和打印): <html> ...

  7. qt tableb view 打印预览和打印的问题 个人解决办法

    好了长话短说  因为tableview 不提供print 函数 ,所以 要实现打印现在基本是基于 两种  一种是利用render 函数    一种是利用 html 来实现    我个人因为在用rend ...

  8. VS2017 MFC对话框程序打印及打印预览的实现

    VS2017 MFC对话框程序打印及打印预览的实现 花了一个星期,研究了网上大量的MFC对话框打印及打印预览功能的demo之后,网上现有的版本都比较旧,所以选中了几个版本,合并修改,得到这个比较完美的 ...

  9. Qt实现Qchart的打印和打印预览的几种方法

    实现打印预览和打印,是挺常用的功能.把其他一些内容如QTextBrowser或者QEditText打印和打印预览是容易的,因为它们都自带了print方法,可以直接输出到printer.这里介绍下Qt实 ...

最新文章

  1. 智办事:高效远程办公指南
  2. 为什么应该学习Kotlin
  3. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法
  4. ym——Android之ListView性能优化
  5. 什么时候用不到索引?
  6. 鱼骨图分析法实际案例_让你头脑更精明的十种思考法:鱼骨图
  7. 计算机实现数论 奇偶排列问题
  8. 字节流抽象类 java
  9. vue实现轮播图(每隔两秒自动翻页、翻到末页自动返回首页、点击按钮左右翻页)
  10. 深度学习入门 基于python的理论和实践 第一章
  11. 关于golang导包的大小写敏感问题
  12. SecureCRT中文乱码解决方法
  13. 《BBC 跟拍 49 年:穷人与富人的人生七年》
  14. 混合多云时代:大型主机z15的新使命
  15. 分享塑胶模具设计思路与流程,建议收藏!
  16. pygame-KidsCanCode系列jumpy-part0-使用sprite
  17. 揪出Android流氓软件
  18. 如何优雅的DIY一个高大上的小台灯
  19. Python开发游戏超简单 迷你跑步游戏
  20. 电子邮件服务器限制匿名,匿名(垃圾)邮件的根源—网络上几乎所有服务器都不可避免的“漏洞-站长资讯中心...

热门文章

  1. 《海边的卡夫卡》书评
  2. Tableau:如何自定义形状
  3. 【Linux】工作中常用的linux命令
  4. matlab 加节点,添加图节点名称、边权重和其他属性
  5. IDC评述网:11月份海外域名主机服务商TOP10
  6. Erlang词法分析器、语法分析器(lexer-leex,yac-yecc)
  7. C++定义结构体大小根堆的方法
  8. Metricbeat 指标采集工具应用示例
  9. FPV入坑前传(20211227)(未完)
  10. 【20210416期AI简报】微软分层ViT模型开源、 DIY一只“眼睛”摄像头