赞
踩
Qt Print Support
模块提供了对打印的支持。最简单的,只需使用一个QPrinter
类和一个打印对话框QPrintDialog
类就可以完成文档的打印操作
本节简单介绍打印文档,打印预览和生产pdf文档
新建Qt Widget项目,项目名myprint ,类名和基类保持MainWindow和QMainWindow不变,完成后,在myprint.pro文件,添加如下一行代码:
QT += printsupport
然后到设计模式向界面上拖入一个Text Edit。再到mainwindow.h文件中先添加类的前置声明
class QPrinter;
然后添加几个槽的声明:
private slots:
void doPrint();
void doPrintPreview();
void printPreview(QPrinter *printer);
void createPdf();
下面到mainwindow.cpp文件中添加头文件
#include <QPrinter>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
#include <QFileDialog>
#include <QFileInfo>
在构造函数中定义几个动作:
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(createPdf()));
ui->mainToolBar->addAction(action_print);
ui->mainToolBar->addAction(action_printPreview);
ui->mainToolBar->addAction(action_pdf);
然后添加那几个槽的定义:
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); // 则执行打印操作
}
}
这里先建立了QPrint对象,然后创建打印对话框,选择打印范围。没有选中范围就打印整个页面
void MainWindow::doPrintPreview() // 打印预览 { QPrinter printer; QPrintPreviewDialog preview(&printer, this); // 创建打印预览对话框 // 当要生成预览页面时,发射paintRequested()信号 connect(&preview, &QPrintPreviewDialog::paintRequested, this, &MainWindow::printPreview); preview.exec(); } //自定义的槽函数 void MainWindow::printPreview(QPrinter *printer) { ui->textEdit->print(printer); }
使用打印预览对话框来进行打印预览,要关联它的paintRequested
信号到槽函数printPreview。
并以传来的QPrinter类对象指针为参数
void MainWindow::createPdf() // 生成PDF文件
{
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);
}
}
学习完这一章,读者可以去看下《Qt 及 Qt Quick开发实战精解(第2版)》一书中的多文档编辑器实例,那个程序比较综合,如果可以很好地完成,那么说明Qt已经入门了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。