最近看了一些Qt方面的东西,老师让我们做一个输入信息生成模板然后发送到打印机进行打印得Qt程序,Qt4、5都有QPrinter类支持跨平台的打印。
先看下效果图吧,运行的时候在这里能看到窗口,自己在ui界面加上去的窗口,这是自己设计的模板,是个个人信息模板吧。
点save,则会保存为pdf文件,打开后是这样的,不会画表格,先从简了
点print,是这样的
可以选择打印机,也可以使用网络打印机,用的是printDialog类
贴一下代码吧
先在.pro文件里加上打印支持
QT += printsupport
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPrintDialog>
#include <QTextEdit>
#include <QTextDocument>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();//保存
void on_pushButton_2_clicked();//打印
private:
Ui::MainWindow *ui;
QTextDocument textDocument;
};
#endif // MAINWINDOW_Hmainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextDocument>
#include <QtPrintSupport/QPrinter>
#include <QPainter>
#include <QTextBrowser>
#include <QDebug>
#include <QMessageBox>
#include <QPrinter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QPrinter printer(QPrinter::ScreenResolution);
printer.setPaperSize(QPrinter::A4);
printer.setPageMargins(30,30,30,30,QPrinter::DevicePixel);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(QString("Mytest") + ".pdf");//设置路径和名称
QPainter painter( &printer );
QFont font;//设置字体等属性
font.setPixelSize(15);
painter.setFont(font);
QTextOption textOption( Qt::AlignCenter);
QPen pen;
pen.setColor(Qt::black);
pen.setWidth(5);
painter.setPen(pen);
int paperWidth = printer.width();
int paperHeigth = printer.height();
//qDebug("width:%d",paperWidth);
//qDebug("height:%d",paperHeigth);
painter.drawText( QRect(QPoint( 0,0),QPoint(243,100)),"name: "+ui->name->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 243,0),QPoint(486,100)),"age: "+ui->age->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 486,0),QPoint(729,100)),"sex: "+ui->sex->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 0,100),QPoint(243,200)),"origo: "+ui->origo->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 243,100),QPoint(486,200)),"education: "+ui->education->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 486,100),QPoint(729,200)),"major: "+ui->major->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 0,200),QPoint(365,300)),"phone: "+ui->phone->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 365,200),QPoint(729,300)),"email: "+ui->email->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 0,300),QPoint(729,400)),"address: "+ui->address->toPlainText (),textOption);
painter.drawText( QRect(QPoint( 0,400),QPoint(729,500)),"evalution: "+ui->evalution->toPlainText (),textOption);
textDocument.print(&printer);
QMessageBox::about(NULL,"about","pdf has saved");
}
void MainWindow::on_pushButton_2_clicked()
{
QPrinter printer;
if(QPrintDialog(&printer).exec() == QDialog::Accepted){
textDocument.print(&printer);
}
}