目录
1.绘制形状
1.线段
- 函数原型:
void drawLine(const QPoint &p1, const QPoint &p2);
- 参数:
p1
:绘制起点坐标p2
:绘制终点坐标
- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawLine(20, 20, 200, 20); painter.drawLine(QPoint(20, 100), QPoint(200, 100)); }
2.矩形
- 函数原型:
void QPainter::drawRect(int x, int y, int width, int height)
- 参数:
x
:窗口横坐标y
:窗口纵坐标width
:矩形宽度height
:矩形高度
- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawRect(100, 100, 300, 200); }
3.圆形
- 函数原型:
void QPainter::drawEllipse(const QPoint& center, int rx, int ry)
- 参数:
center
:中心点坐标rx
:横坐标ry
:纵坐标
- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawEllipse(200, 200, 100, 100); }
4.文本
QPainter
类中不仅提供了绘制图形的功能,还可以使⽤QPainter::drawText()
来绘制⽂字,也可以使⽤QPainter::setFont()
设置字体等信息- 注意:
QPainter::drawText()
参数的含义- 第一个参数:文字最左侧的位置
- 第二个参数:文字的基线位置(写字母四线格,第三根线的位置)
- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawText(0, 100, "SnowK"); }
2.绘制图片
1.处理图像类
- Qt提供了四个类来处理图像数据:
QImage
、QPixmap
、QBitmap
和QPicture
,它们都是常⽤的绘图设备 QImage
:主要⽤来进⾏I/O处理,它对I/O处理操作进⾏了优化,⽽且可以⽤来直接访问和操作像素QPixmap
:主要⽤来在屏幕上显⽰图像,它对在屏幕上显⽰图像进⾏了优化QBitmap
:QPixmap
的⼦类,⽤来处理颜⾊深度为1的图像,即只能显⽰⿊⽩两种颜⾊QPicture
:⽤来记录并重演QPainter
命令- 本篇主要讲解
QPixmap
1.绘制简单图片
- 图⽚绘制可以使⽤
QPainter
类中的drawPixmap()
来实现 - 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg")); }
2.平移图片
- 平移图⽚实际是通过改变坐标来实现
QPainter
类中提供了translate()
来实现坐标原点的改变- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.translate(100, 100); painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg")); }
3.缩放图片
- 图⽚的放⼤和缩⼩可以使⽤
QPainter
类中的drawPixmap()
来实现 - 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 以(0, 0)开始画图,尺寸于原图一致 painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg")); // 以(300, 400)开始画图,尺寸变为 50*60 painter.drawPixmap(300, 400, 50, 60, QPixmap(":/SnowK.jpg")); }
4.旋转图片
- 图⽚的旋转使⽤的是
QPainter
类中的rotate()
,本质是把QPainter
对象进行了旋转- 它默认是以原点为中⼼进⾏旋转的
- 如果要改变旋转的中⼼,可以使⽤
translate()
完成
- 示例:
void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 让图片的中心作为旋转的中心 painter.translate(200, 300); // 顺时针旋转90度 painter.rotate(90); // 复原原点位置 painter.translate(-200, -300); painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg")); }
3.特殊的绘图设备
0.前言
- 之前是使⽤
QWidget
作为绘图设备,Qt中还存在下列三个⽐较特殊的绘图设备QPixmap
:⽤于在显⽰器上显⽰图⽚QImage
:⽤于对图⽚进⾏像素级修改QPicture
:⽤于对QPainter的⼀系列操作进⾏存档
1.QPixmap
- 核心特性:
- 使⽤
QPainter
直接在上⾯进⾏绘制图形 - 通过⽂件路径加载并显⽰图⽚
- 搭配
QPainter
的drawPixmap()
函数,可以把这个图⽚绘制到⼀个QLabel
、QPushButton
等控件上 - 和系统/显⽰设备强相关,不同系统/显⽰设备下,
QPixmap
的显⽰可能会有所差别
- 使⽤
2.QImage
- 核心特性:
- 使⽤
QPainter
直接在上⾯进⾏绘制图形 - 通过⽂件路径加载并显⽰图⽚
- 能够针对图⽚进⾏像素级别的操作(操作某个指定的像素)
- 独⽴于硬件的绘制系统,能够在不同系统之上提供⼀致的显⽰
- 使⽤
3.QPicture
QPicture
类似于很多游戏的Replay功能- 核心特性
- 使⽤
QPainter
直接在上⾯进⾏绘制图形 - 通过⽂件路径加载并显⽰图⽚
- 能够记录
QPainter
的操作步骤 - 独⽴于硬件的绘制系统,能够在不同系统之上提供⼀致的显⽰
- 使⽤
- 注意:
QPicture
加载的必须是⾃⾝的存档⽂件,⽽不能是任意的png、jpg等图⽚⽂件