- 在 .pro中添加:
QT += printsupport
- 在设计模式界面拖入一个 Text Edit,在mainwindow.h文件添加类的前置声明:
class QPrinter;
- 在mainwindow.h添加槽声明:
private slots:
//打印文档
void doPrint();
void doPrintPreview();
void printPreview(QPrinter *printer);
void createPdf();
- 在mainwindow.cpp文件中添加头文件:
#include <QPrinter>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QFileDialog>
#include <QFileInfo>
#include <QAction>
- 在构造函数中定义:建立QPrinter类对象,它代表一个打印设备,创建一个打印话框,如果编辑器中有选中区域,则打印该区域,否则打印整个页面。
setWindowTitle("打印文档");
setWindowIcon(QPixmap(":/new/prefix1/images/file.png"));
QAction *action_print=new QAction(tr("打印"),this);
QAction *action_printPreview=new QAction(tr("打印预览"),this);
QAction *action_pdf=new QAction(tr("生成pdf"),this);
connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));
connect(action_printPreview,SIGNAL(triggered()),this,SLOT(doPrintPreview()));
connect(action_pdf,SIGNAL(triggered()),this,SLOT(creatPdf()));
ui->toolBar->addAction(action_print);
ui->toolBar->addAction(action_printPreview);
ui->toolBar->addAction(action_pdf);
-
使用打印对话框来进行打印预览,关联它的paintRequsted()信号到自定义的槽上,在槽中调用编辑器的打印函数。
id MainWindow::createPdf() { QString fileName=QFileDialog::getSaveFileName(this,tr("导出PDF文件"),QString(),"*.pdf"); if(!fileName.isEmpty()) { if(QFileInfo(fileName).suffix().isEmpty()) fileName.append(".pdf");//如果文件后缀为空,则默认使用.pdf QPrinter printer; printer.setOutputFormat(QPrinter::PdfFormat);//指定输出格式为pdf printer.setOutputFileName(fileName); ui->textEdit->print(&printer); } }
全部代码(mainwindow.cpp):
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPrinter>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QFileDialog>
#include <QFileInfo>
#include <QAction>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("打印文档");
setWindowIcon(QPixmap(":/new/prefix1/images/file.png"));
QAction *action_print=new QAction(tr("打印"),this);
QAction *action_printPreview=new QAction(tr("打印预览"),this);
QAction *action_pdf=new QAction(tr("生成pdf"),this);
connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));
connect(action_printPreview,SIGNAL(triggered()),this,SLOT(doPrintPreview()));
connect(action_pdf,SIGNAL(triggered()),this,SLOT(creatPdf()));
ui->toolBar->addAction(action_print);
ui->toolBar->addAction(action_printPreview);
ui->toolBar->addAction(action_pdf);
}
MainWindow::~MainWindow()
{
delete ui;
}
//打印
void MainWindow::doPrint()
{
QPrinter printer;//创建打印机对象
QPrintDialog dlg(&printer,this); //创建打印对话框
//如果编辑器中由选中区域,则打印选中区域
if(ui->textEdit->textCursor().hasSelection())
dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
if(dlg.exec()==QDialog::Accepted)
{
//如果在对话框中按下打印按钮
//则执行打印操作
ui->textEdit->print(&printer);
}
}
//打印预览
void MainWindow::doPrintPreview()
{
QPrinter printer;
QPrintPreviewDialog preview(&printer,this);//创建打印预览对话框
//当要生成预览界面时,发射paintRequested()信号
connect(&preview,&QPrintPreviewDialog::paintRequested,this,&MainWindow::printPreview);
preview.exec();
}
void MainWindow::printPreview(QPrinter *printer)
{
}
void MainWindow::createPdf()
{
QString fileName=QFileDialog::getSaveFileName(this,tr("导出PDF文件"),QString(),"*.pdf");
if(!fileName.isEmpty())
{
if(QFileInfo(fileName).suffix().isEmpty())
fileName.append(".pdf");//如果文件后缀为空,则默认使用.pdf
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);//指定输出格式为pdf
printer.setOutputFileName(fileName);
ui->textEdit->print(&printer);
}
}
-
运行图:
image.png
image.png
image.png