功能:实现打印功能,导出为PDF格式文档
要使用到打印功能,首先要在 .pro 文件添加如下一行代码:
QT += printsupport
下面给出实现
头文件:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
#include <QPrinter>
#include <QFileDialog>
#include <QPrintDialog>
#include <QPrintPreviewDialog>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
private slots:
void doPrint(); //打印
void doPrintPreview(); //显示打印预览
void printPreview(QPrinter *printer);
void creatPdf(); //生成PDF文件
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
源文件:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setAcceptDrops(true); //接受拖放
QAction *action_print = new QAction(tr("打印"),this);
QAction *action_printPreview = new QAction(tr("打印预览"),this);
QAction *action_creatPdf = new QAction(tr("生成PDF"),this);
ui->mainToolBar->addAction(action_print);
ui->mainToolBar->addAction(action_printPreview);
ui->mainToolBar->addAction(action_creatPdf);
connect(action_print,SIGNAL(triggered()),
this,SLOT(doPrint()));
connect(action_printPreview,SIGNAL(triggered()),
this,SLOT(doPrintPreview()));
connect(action_creatPdf,SIGNAL(triggered()),
this,SLOT(creatPdf()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::dragEnterEvent(QDragEnterEvent *event) //拖进
{
if(event->mimeData()->hasUrls())
{
event->acceptProposedAction();
}
else
{
event->ignore();
}
}
void MainWindow::dropEvent(QDropEvent *event) //放下
{
if(event->mimeData()->hasUrls())
{
QList<QUrl> urlist = event->mimeData()->urls();
QString fileName = urlist.at(0).toLocalFile();
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
{
return;
}
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
}
}
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); //创建打印预览框
//必须先关联要生成预览的区域,因为如果先exec()则没有预览区
connect(&preview,&QPrintPreviewDialog::paintRequested,
this,&MainWindow::printPreview); //要生成预览界面时,发送paintRequested()信号
preview.exec();
}
void MainWindow::printPreview(QPrinter *printer)
{
ui->textEdit->print(printer);
}
void MainWindow::creatPdf() //生成PDF文件
{
QString fileName = QFileDialog::getSaveFileName(this,tr("导出PDF"),
QString(),"*.pdf");
if(!fileName.isEmpty())
{
if(QFileInfo(fileName).suffix().isEmpty()) //如果后缀为空,默认使用pdf格式
{
fileName.append(".pdf");
}
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);//指定输出格式
printer.setOutputFileName(fileName); //指定文件名字
ui->textEdit->print(&printer);
}
}
运行效果: