一、要实现打印功能,首先要在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();
}