///////////////.h
#ifndef PRINTMANAGER_H
#define PRINTMANAGER_H
#include <QThread>
class QPainter;
class QPrinter;
class QTableWidget;
class QLabel;
class printManager : public QThread
{
Q_OBJECT
public:
printManager(QWidget *contentp);
void run();
private:
void printTable9(QTableWidget *);
void printTable5(QTableWidget *);
void printPicture(QLabel *);
signals:
void printStarted(QString printSignal="printStarted");
void printFinished(QString printSignal="printFinished");
void printProgress(int percent);
private:
QWidget *content;
QPainter *painter;
QPrinter *printer;
};
#endif // PRINTMANAGER_H
////////////.cpp
#include "printManager.h"
#include<QTableWidget>
#include<QLabel>
#include<QTableWidget>
#include<QLabel>
#include<QDateTime>
#include<QPrinter>
#include<QPainter>
#include<QtDebug>
#define DATEWIDTH 60
#define TYPEWIDTH 90
#define FIELDWIDTH 150
#define SPECIALWIDTH 230
#define INCOMEWIDTH 270
#define OUTPUTWIDTH 340
#define TOTALWIDTH 400
#define HANDMANWIDTH 460
#define FIVEONE 60
#define FIVETWO 120
#define FIVETHREE 180
#define FIVEFOUR 240
#define ONEPAGE 43
#define PAGEMARGINWIDTH 20
#define PAGEMARGINHEIGHT 20
#define ROWHEIGHT 20
printManager::printManager(QWidget * contentp)
:content(contentp)
{
printer=new QPrinter();
printer->setOutputFileName("output_file/"+QDateTime::currentDateTime().toString());
printer->setOutputFormat(QPrinter::PdfFormat);
painter=new QPainter(printer);
}
void printManager::printTable9(QTableWidget *table)
{
int rowCount,fullCircuit,i;
rowCount=table->rowCount();
fullCircuit=0;
for(i=0;i<rowCount;i++)
{
painter->drawText(PAGEMARGINWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,table->item(i,0)->text());
painter->drawText(PAGEMARGINWIDTH+DATEWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,1)->text());
painter->drawText(PAGEMARGINWIDTH+TYPEWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,2)->text());
painter->drawText(PAGEMARGINWIDTH+FIELDWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,3)->text());
painter->drawText(PAGEMARGINWIDTH+SPECIALWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,4)->text());
painter->drawText(PAGEMARGINWIDTH+INCOMEWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,5)->text());
painter->drawText(PAGEMARGINWIDTH+OUTPUTWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,6)->text());
painter->drawText(PAGEMARGINWIDTH+TOTALWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,7)->text());
painter->drawText(PAGEMARGINWIDTH+HANDMANWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,8)->text());
++fullCircuit;
if(fullCircuit==ONEPAGE&&i!=(rowCount-1))
{
fullCircuit=0;
printer->newPage();
}
emit printProgress(((double)(i+1))/((double)rowCount));
}
}
void printManager::printTable5(QTableWidget *table)
{
int rowCount,fullCircuit,i;
rowCount=table->rowCount();
fullCircuit=0;
for(i=0;i<rowCount;i++)
{
qDebug()<<"draw"<<i<<printer->outputFormat()<<endl;
painter->drawText(PAGEMARGINWIDTH,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,table->item(i,0)->text());
painter->drawText(PAGEMARGINWIDTH+FIVEONE,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,1)->text());
painter->drawText(PAGEMARGINWIDTH+FIVETWO,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,2)->text());
painter->drawText(PAGEMARGINWIDTH+FIVETHREE,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,3)->text());
painter->drawText(PAGEMARGINWIDTH+FIVEFOUR,PAGEMARGINHEIGHT+fullCircuit*ROWHEIGHT,"|"+table->item(i,4)->text());
++fullCircuit;
if(fullCircuit==ONEPAGE&&i!=(rowCount-1))
{
fullCircuit=0;
printer->newPage();
}
emit printProgress(((double)(i+1))/((double)rowCount));
}
}
void printManager::printPicture(QLabel *)
{
}
void printManager::run()
{
this->start();
emit printProgress(0);
emit printStarted();
if(dynamic_cast<QTableWidget *>(content))
{
qDebug()<<"print object is a tabal"<<endl;
QTableWidget *tablePointer=dynamic_cast<QTableWidget *>(content);
if(tablePointer->columnCount()==9)
printTable9(tablePointer);
else printTable5(tablePointer);
}
else if(dynamic_cast<QLabel *>(content))
{
qDebug()<<"printobject is a picture"<<endl;
QLabel *labelPointer=dynamic_cast<QLabel *>(content);
printPicture(labelPointer);
}
else
{
qDebug()<<"Not a valid print task"<<endl;
}
emit printProgress(100);
}
在程序中通过run执行了printTable5.
通过终端的显示可知printTable5中的drawText确实执行了足够多次。
但是打印出的文档却是一个空的文本文件,不知道是为什么?我明
明设置了文件格式为pdf啊!求大侠指点一二。