Qt--打印文档

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

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已经入门了。

相关文章