//for starf study
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QPainter>
#include<QPicture>
//QPicture类是一种绘画设备,用于记录和重放QPaint命令。
/*
QPicture picture;
QPainter painter;
painter.begin(&picture); // paint in picture
painter.drawEllipse(10,20, 80,70); // draw an ellipse
painter.end(); // painting done
picture.save("drawing.pic"); // save picture
*/
//就是导出绘画的能力
//相比其他的QImage QPixmap 会构造一个实际的图像对象
//QPicture更像是一个工具,用来对图像对象进行一些操作
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPicture Picture;
QPicture Picture2;
qDebug()<<Picture.boundingRect();//返回图片的边框,如果图片不包含数据,则返回无效的矩形。
const char *data;
data = Picture.data(); //返回指向图片数据的指针。指针仅在调用此图片上的下一个非常量函数之前有效。
//如果图片不包含数据,则返回的指针为0。
qDebug()<<Picture.isNull();//如果图片不包含数据,则返回true;否则返回false。
qDebug()<<Picture.load(":/new/prefix1/D:/test.png");//从文件名指定的文件加载图片,如果成功,则返回true;
//bool QPicture::load(QIODevice *dev, const char *format = nullptr)
qDebug()<<Picture.save("D:/test.pic");//将图片保存到文件名指定的文件中,如果成功,则返回true;
qDebug()<<Picture.size(); //返回图片数据的大小。
//bool QPicture::save(QIODevice *dev, const char *format = nullptr)
QPainter p(this);
Picture.play(&p); //使用画师重放图片,如果成功则返回true;否则返回false。
//此函数的作用与qPaint::drawPicture()完全相同
Picture.setBoundingRect(QRect(16,16,300,200));//将图片的边框设置为r。自动计算的值将被覆盖。
Picture.setData(data, Picture.size());//直接根据数据和大小设置图片数据。此函数用于复制输入数据。
Picture.swap(Picture2); //交换两个pic对象
}