这是一个可以记录和重现QPainter命令的绘图设备。 QPicture将QPainter的命令序列化到一个IO设备,保存为一个平台独立的文件格式。
Qt的这种格式是二进制的,不同于某些本地的元文件,Qt的pictures文件没有内容上的限制,只要是能够被QPainter绘制的元素,不论是字体还是pixmap,或者是变换,都可以保存进一个picture中。
QPicture是平台无关的,因此它可以使用在多种设备之上,比如svg、pdf、ps、打印机或者屏幕。QPicture使用系统的分辨率,并且可以调整 QPainter来消除不同设备之间的显示差异。
项目示例“05_QPicture.pro”,代码:
#include "widget.h"
#include "ui_widget.h"
#include <QPicture>
#include <QPainter>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//The QPicture class is a paint device that records and
//replays QPainter commands.
QPicture picture;
QPainter p;
QPen pen;
pen.setColor(QColor(Qt::red));
pen.setWidth(5);
//begin(QPaintDevice *device)
//在图片设备里画图;
p.begin(&picture);
p.setPen(pen);
p.drawPixmap(0,0,80,80,QPixmap("../images/Luffy.png"));
p.drawLine(50,50,150,50);
p.drawText(QPoint(150,150),"Hello World!");
p.end();
//上面这段代码实现的是:用画家对象p,在画图设备中画图片,不过保存的是二进制文件;
picture.save("../picture.png");
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
//把二进制文件加载到picture设备里;
QPicture pic;
pic.load("../picture.png");
QPainter p(this);
//将图片设备在父窗口this里面显示;
p.drawPicture(0,0,pic);
}
运行效果: