—— 均为自学笔记,如有错误请指正
第一节 绘图系统
QPainter → QPaintEngine → QPaintDevice
- QPainter :执行绘制操作 <画笔>
- QPaintDevice:二维空间的抽象 <使用画笔的地方 "纸张、屏幕">
- QPaintEngine:提供画笔在不同设备上进行绘制的统一接口<使"纸张、屏幕"使用同一种画笔>
使用QPainter在QPaintDevice上进行绘制,他们之间使用QPaintEngine进行通讯(即翻译QPainter的指令)
第二节 绘图设备
绘图设备是指继承QPainterDevice的子类,Qt一共提供了四个这样的类
- QPixmap:专门为图像在屏幕上的显示做了优化。
- QBitmap:是QPixmap的一个子类,它的色深限定为1,可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。
- QImage:专门为图像的像素级访问做了优化 。 <对每一个像素点赋值>
- QPicture则可以记录和重现QPainter的各条命令。
注:色深限定为1:只有白色和黑色
1. Pixmap <画在磁盘上>
- 代码
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//Pixmap绘图设备 <往磁盘去画>
QPixmap pix(300,300);
//填充颜色
pix.fill(Qt::white);
//声明画家
QPainter painter(&pix);
painter.setPen(QPen(Qt::green));
painter.drawEllipse(QPoint(150,150),100,100);
//保存
pix.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pix.png");
}
- 效果展示
2. QImage <可以对像素点进行访>
- 代码 <基础操作 .cpp>
//QImage 绘图设备
QImage img(300,300,QImage::Format_RGB32);
//填充色
img.fill(Qt::white);
//声明画家
QPainter painter(&img);
painter.setPen(QPen(Qt::blue));
painter.drawEllipse(QPoint(150,150),100,100);
//保存
img.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\img.png");
- 运行展示
- 代码 <重写绘图事件,对像素点进行访问>
//.h下声明绘图事件函数
//绘图事件
void paintEvent(QPaintEvent *);
//.cpp下重写绘图事件 对像素点进行访问
//重写绘图事件
void Widget::paintEvent(QPaintEvent *)
{
//创建画家
QPainter painter(this);
//利用QImage 对像素进行修改
QImage img;
img.load(":/Image/Luffy.png");
//修改像素点
for(int i = 50 ; i < 100 ; i ++)
{
for(int j = 50 ; j < 100 ; j++)
{
QRgb value = qRgb(255,0,0);
img.setPixel(i,j,value);
}
}
//画图位置
painter.drawImage(0,0,img);
}
- 运行展示
3. QPicture <可以记录和重现绘图指令>
- 代码 <第一步:画图并保存绘图指令.cpp构造函数中>
//QPicture绘图设备 可以记录和重现绘制指令
QPicture pic;
QPainter painter; //先指定画家对象
painter.begin(&pic); //再指定绘图设备 开始画画
painter.setPen(QPen(Qt::cyan));
painter.drawEllipse(QPoint(150,150),100,100);
painter.end(); //结束画画
//保存到磁盘
pic.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pic.zt"); //注意文件后缀名 为zt 这个文件中保存了绘图指令
注:此处保存文件名后缀.zt 可以自定义
- 代码<第二步:重现绘图指令.cpp 重写绘图事件函数中>
// .h 头文件下 声明函数
void paintEvent(QPaintEvent *);
//.cpp下重写绘图事件
//重写绘图事件
void Widget::paintEvent(QPaintEvent *)
{
//创建画家
QPainter painter(this);
QPicture pic;
pic.load("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pic.zt");
//画图位置
painter.drawPicture(0,0,pic);
}
- 运行展示