Qt中QPicture对报表的实现

最近写了一个小项目  中间要把所获取的数据以报告的形式打印出来  在这里整理出来


首先是背景的显示  也就是相当于那张纸张  这里面要对它设置大小  并且我自己加了一个水印在这个纸上  后面会调用这个类进行把报表的其他内容绘制上去

singlereporframet.h

#ifndef SINGLEREPORFRAMET_H
#define SINGLEREPORFRAMET_H

#include <QPushButton>
#include <QPainter>
#include <QPixmap>
#include <QPicture>

class singlereporframet : public QPushButton
{
	//Q_OBJECT


public:
	singlereporframet(QWidget *parent = 0);
	~singlereporframet();

public:
	QPixmap *m_report;
	QPicture *m_reportPicture;

private:
	void		paintEvent(QPaintEvent *);
	void		drawReport(QPicture *report);
	
};

#endif // SINGLEREPORFRAMET_H
singlereporframet.cpp

void singlereporframet::paintEvent(QPaintEvent *e)
{
	drawReport(m_reportPicture);
}


void singlereporframet::drawReport(QPicture *report)
{
	if (report == NULL)
	{
		return;
	}
	QPainter painter;
	painter.begin(this);
	QRect rect = painter.viewport();
	QSize size;
	size.setWidth(595);
	size.setHeight(839);
	painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
	painter.setWindow(QRect(0, 0, 595, 839));
	painter.setPen(QPen(Qt::white, 1, Qt::SolidLine, Qt::RoundCap));
	painter.setBrush(QBrush(Qt::white, Qt::SolidPattern));
	painter.drawRect(10, 10, 595, 839);
	painter.drawPicture(10, 10, *report);
	
	QPixmap ground;
	ground.load("background.jpg");     //水印
	QPixmap tempp(ground.size());
	tempp.fill(Qt::transparent);
	QPainter p(&tempp);
	p.setCompositionMode(QPainter::CompositionMode_Source);
	p.drawPixmap(0, 0, ground);
	p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
	p.fillRect(tempp.rect(), QColor(0, 0, 0, 35));
	painter.drawPixmap(130, 300,tempp);

	painter.end();
}
后面是对报告上的具体内容进行实现 主要是分开各个小的模块进行绘制   然后把它们最后拼装到那张A4纸上

reportinterface.cpp

void reportinterface::GenerateReportForPeriod(QList<QPicture *>  &listreport)
{
	QPicture  *report = new QPicture;
	int topline = 20;
	int line = 2;
	QPainter painter;
	painter.begin(report);
	QRect range;
	QString text;
	range = QRect(430, topline, 120, 17);
	painter.setPen(QPen(QColor(qRgb(255,255,255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("第___页,共___页");
	painter.setFont(QFont("Times New Roman", 10));
	painter.drawText(range, Qt::AlignRight, text);
	topline = topline +19;


	range = QRect(350, topline, 200, 17);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	//	painter.setBrush(QBrush(QColor(qRgb(118, 154, 207)), Qt::SolidPattern));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("fff(2015)检字B 第____号");
	painter.setFont(QFont("Times New Roman", 10));
	painter.drawText(range, Qt::AlignRight, text);
	topline = topline + 23;


	range = QRect(200, topline, 250, 27);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("检  测  报  告  单");
	painter.setFont(QFont("Times New Roman", 20, QFont::Bold));
	painter.drawText(range, Qt::AlignLeft, text);
	topline = topline + 40;


	painter.setPen(QPen(Qt::black, 2));
	painter.drawLine(45, topline, 550, topline);
	topline = topline +20 ;
	
	range = QRect(45, topline, 60, 17);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("样品名称");
	painter.setFont(QFont("Times New Roman", 10, QFont::Bold));
	painter.drawText(range, Qt::AlignLeft, text);


	painter.setPen(QPen(Qt::black, 1));
	painter.drawLine(45 + 60 + line, topline+18, 297, topline+18);

	range = QRect(45+60 + line, topline, 190, 17);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("一二三四五六七八");
	painter.setFont(QFont("Times New Roman", 9));
	painter.drawText(range, Qt::AlignLeft, text);


	range = QRect(45+60+190+line*2, topline, 60, 17);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("样品型号");
	painter.setFont(QFont("Times New Roman", 10, QFont::Bold));
	painter.drawText(range, Qt::AlignLeft, text);

	painter.setPen(QPen(Qt::black, 1));
	painter.drawLine(45+60*2+190+line*3, topline + 18, 550, topline + 18);

	range = QRect(45 + 60*2+190 + line*3, topline, 190, 17);
	painter.setPen(QPen(QColor(qRgb(255, 255, 255)), 1, Qt::SolidLine, Qt::RoundCap));
	painter.drawRect(range);
	painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap));
	text = QString::fromLocal8Bit("一二三四五六七八");
	painter.setFont(QFont("Times New Roman", 9));
	painter.drawText(range, Qt::AlignLeft, text);
	topline = topline + 25;
<span style="white-space:pre">	</span>painter.end();
<span style="white-space:pre">	</span>listreport.append(report);
最后就只要在主函数中调用这些  并把它们显示出来就好了


GenerateReportForPeriod(m_listPeriodReport);
foreach(QPicture *m_report, m_listPeriodReport)
	{
		singlereporframet  *pbtnReport = new singlereporframet(scrollAreaStackedwidget);
		pbtnReport->m_reportPicture = m_report;
		scrollAreaStackedwidget->addWidget(pbtnReport);
	}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值