QT实现打印预览及生成Pdf功能

一、要实现打印功能,首先要在pro文件中加上 QT += printsupport 并且需要重新qmake

二、Qt提供了QPrintPreviewDIalog 类,所以打印功能可以直接通过此对话框实现

三、要唤出 QPrintPreviewDialog 对话框,需要使用 

connect(&previewDialog,SIGNAL(paintRequested(QPrinter*)),this,SLOT(Preview(QPrinter*) ) );

其中,previewDialog就是预先创建的QPrintPreviewDialog 对象,SIGNAL:paintRequest是预览请求信号,我们可以通过previewDialog.exec()唤出Dialog来发出这个信号

SLOT中的 preview() 是自己定义的函数,内容如下:

void MainWindow::Preview(QPrinter *printer)
{
    textEdit->print(printer);
}

 它可以将texEdit中的内容送入print 中,这样预览界面就能显示内容了

具体的代码如下:

1.建立QTWidgetApplication

2.在.pro文件中添加

QT += printsupport

3.在mainwindows.h添加

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPrinter>
#include <QFileDialog>
#include <QTextEdit>
#include <QPushButton>
#include <QPrintPreviewDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QTextEdit *textEdit;
    QPushButton *pushButton;
    QPushButton *pushButton_printPreview;
    QPrintPreviewDialog *printPreview;
private slots:
    void CreatPdf();
    void PrintPreview();
    void Preview(QPrinter *printer);
};

#endif // MAINWINDOW_H

在mainwindow.cpp中添加如下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPrinter>
#include <QPainter>
#include <QTableView>
#include <QStandardItemModel>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setMaximumSize(800,800);
    this->setMinimumSize(800,800);
    pushButton = new QPushButton(tr("生成PDF"),this);
    pushButton_printPreview = new QPushButton(tr("打印预览"),this);

    textEdit = new QTextEdit(this);
    pushButton->setGeometry(QRect(100,100,100,25));
    pushButton_printPreview->setGeometry(QRect(208,100,100,25));
    textEdit->setGeometry(QRect(100,128,400,500));

    connect(pushButton,SIGNAL(clicked()),this,SLOT(CreatPdf()) );
    connect(pushButton_printPreview,SIGNAL(clicked()),this,SLOT(PrintPreview()) );

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::CreatPdf()
{
    QPrinter printer;
    QFileDialog fileDialog;
    QString str = QFileDialog::getSaveFileName(this,tr("Save Text"),"/",tr("Text Files (*.pdf)"));
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setPageSize(QPrinter::A4);
    printer.setOutputFileName(str);
    textEdit->print(&printer);
}

void MainWindow::PrintPreview()
{
    QPrinter printer;
    QPrintPreviewDialog previewDialog(&printer,this);
    connect(&previewDialog,SIGNAL(paintRequested(QPrinter*)),this,SLOT(Preview(QPrinter*) ) );
    previewDialog.exec(); //打印对话框显示,paintRequest触发
}

void MainWindow::Preview(QPrinter *printer)
{
    textEdit->print(printer);
}

在main.cpp中添加如下代码:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值