您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 2浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT打印文档的操作方法

txwtech 发布时间:2022-09-04 21:55:16 ,浏览量:2

 

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 #include #include #include #include 在构造函数中定义几个动作:

 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类对象指针为参数  

#ifndef MAINWINDOW_MYPRINT_H
#define MAINWINDOW_MYPRINT_H

#include 
class QPrinter;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow_myprint; }
QT_END_NAMESPACE

class MainWindow_myprint : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow_myprint(QWidget *parent = nullptr);
    ~MainWindow_myprint();

private:
    Ui::MainWindow_myprint *ui;
private slots:
    void doPrint();
    void DoPrintPreview();
    void PrintPreview(QPrinter *printer);
    void CreatePdf();
};
#endif // MAINWINDOW_MYPRINT_H
#include "mainwindow_myprint.h"
#include "ui_mainwindow_myprint.h"
#include 
#include 
#include 
#include 
#include 
//QT5.5打印文档

MainWindow_myprint::MainWindow_myprint(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow_myprint)
{
    ui->setupUi(this);
    QAction * action_print=new QAction(tr("打印"),this);//by txwtech 2022.9
    QAction *action_print_preview=new QAction(tr("打印预览"),this);
    QAction *action_pdf=new QAction(tr("创建pdf"),this);
    connect(action_print,SIGNAL(triggered()),this,SLOT(doPrint()));
    connect(action_print_preview,SIGNAL(triggered()),this,SLOT(DoPrintPreview()));
    connect(action_pdf,SIGNAL(triggered()),this,SLOT(CreatePdf()));
    ui->toolBar->addAction(action_print);
    ui->toolBar->addAction(action_print_preview);
    ui->toolBar->addAction(action_pdf);


}

MainWindow_myprint::~MainWindow_myprint()
{
    delete ui;
}

void MainWindow_myprint::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_myprint::DoPrintPreview()//打印预览
{
  QPrinter printer;
  QPrintPreviewDialog preview(&printer,this);
  //当要生成预览页面时,发射paintRequested()信号
  connect(&preview,&QPrintPreviewDialog::paintRequested,this,&MainWindow_myprint::PrintPreview);
  preview.exec();
}

void MainWindow_myprint::PrintPreview(QPrinter *printer)
{
   ui->textEdit->print(printer);
}

void MainWindow_myprint::CreatePdf()//创建PDF
{
    QString file_name=QFileDialog::getSaveFileName(this,tr("导出PDF文件"),QString(),"*.pdf");
    if(!file_name.isEmpty())
    {
        if(QFileInfo(file_name).suffix().isEmpty())
        {
            file_name.append(".pdf");
        }
        QPrinter printer;
        printer.setOutputFormat(QPrinter::PdfFormat);
        printer.setOutputFileName(file_name);
        ui->textEdit->print(&printer);//执行打印的操作
    }
}

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0394s