最近看了一些Qt方面的东西,老师让我们做一个输入信息生成模板然后发送到打印机进行打印得Qt程序,Qt4、5都有QPrinter类支持跨平台的打印。
    先看下效果图吧,运行的时候在这里能看到窗口,自己在ui界面加上去的窗口,这是自己设计的模板,是个个人信息模板吧。
    Qt打印--输入信息生成模板发送到打印机     

    点save,则会保存为pdf文件,打开后是这样的,不会画表格,先从简了
    Qt打印--输入信息生成模板发送到打印机
        点print,是这样的
    Qt打印--输入信息生成模板发送到打印机
    可以选择打印机,也可以使用网络打印机,用的是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_H
mainwindow.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);
    }
}


相关文章: