QPrintPreviewDialog 打印预览使用实例

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_OBJECT

   public:
    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传送门

上一篇:字符串逆序-c语言


下一篇:Qt学习c++