Qt打印--輸入信息生成模板發送到打印機

    最近看了一些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_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);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章