Qt--打印文档

x33g5p2x  于2022-03-18 转载在 其他  
字(2.4k)|赞(0)|评价(0)|浏览(567)

Qt Print Support模块提供了对打印的支持。最简单的,只需使用一个QPrinter类和一个打印对话框QPrintDialog类就可以完成文档的打印操作

本节简单介绍打印文档,打印预览和生产pdf文档

新建Qt Widget项目,项目名myprint ,类名和基类保持MainWindow和QMainWindow不变,完成后,在myprint.pro文件,添加如下一行代码:

  1. QT += printsupport

然后到设计模式向界面上拖入一个Text Edit。再到mainwindow.h文件中先添加类的前置声明

  1. class QPrinter

然后添加几个槽的声明:

  1. private slots:
  2. void doPrint();
  3. void doPrintPreview();
  4. void printPreview(QPrinter *printer);
  5. void createPdf();

下面到mainwindow.cpp文件中添加头文件

  1. #include <QPrinter>
  2. #include <QPrintDialog>
  3. #include <QPrintPreviewDialog>
  4. #include <QFileDialog>
  5. #include <QFileInfo>

在构造函数中定义几个动作:

  1. QAction *action_print = new QAction(tr("打印"),this);
  2. QAction *action_printPreview = new QAction(tr("打印预览"),this);
  3. QAction *action_pdf = new QAction(tr("生成pdf"),this);
  4. connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));
  5. connect(action_printPreview,SIGNAL(triggered()),this,SLOT(doPrintPreview()));
  6. connect(action_pdf,SIGNAL(triggered()),this,SLOT(createPdf()));
  7. ui->mainToolBar->addAction(action_print);
  8. ui->mainToolBar->addAction(action_printPreview);
  9. ui->mainToolBar->addAction(action_pdf);

然后添加那几个槽的定义:

  1. void MainWindow::doPrint() // 打印
  2. {
  3. QPrinter printer; // 创建打印机对象
  4. QPrintDialog dlg(&printer, this); // 创建打印对话框
  5. // 如果编辑器中有选中区域,则打印选中区域
  6. if (ui->textEdit->textCursor().hasSelection())
  7. dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
  8. if (dlg.exec() == QDialog::Accepted) { // 如果在对话框中按下了打印按钮
  9. ui->textEdit->print(&printer); // 则执行打印操作
  10. }
  11. }

这里先建立了QPrint对象,然后创建打印对话框,选择打印范围。没有选中范围就打印整个页面

  1. void MainWindow::doPrintPreview() // 打印预览
  2. {
  3. QPrinter printer;
  4. QPrintPreviewDialog preview(&printer, this); // 创建打印预览对话框
  5. // 当要生成预览页面时,发射paintRequested()信号
  6. connect(&preview, &QPrintPreviewDialog::paintRequested,
  7. this, &MainWindow::printPreview);
  8. preview.exec();
  9. }
  10. //自定义的槽函数
  11. void MainWindow::printPreview(QPrinter *printer)
  12. {
  13. ui->textEdit->print(printer);
  14. }

使用打印预览对话框来进行打印预览,要关联它的paintRequested信号到槽函数printPreview。
并以传来的QPrinter类对象指针为参数

  1. void MainWindow::createPdf() // 生成PDF文件
  2. {
  3. QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"),
  4. QString(), "*.pdf");
  5. if (!fileName.isEmpty()) {
  6. if (QFileInfo(fileName).suffix().isEmpty())
  7. fileName.append(".pdf"); // 如果文件后缀为空,则默认使用.pdf
  8. QPrinter printer;
  9. printer.setOutputFormat(QPrinter::PdfFormat); // 指定输出格式为pdf
  10. printer.setOutputFileName(fileName);
  11. ui->textEdit->print(&printer);
  12. }
  13. }

学习完这一章,读者可以去看下《Qt 及 Qt Quick开发实战精解(第2版)》一书中的多文档编辑器实例,那个程序比较综合,如果可以很好地完成,那么说明Qt已经入门了。

相关文章