绘图基础
虽然 Qt 已经内置了很多的控件,但是不能保证现有控件就可以应对所有场景。很多时候我们需要更强的 “自定制” 能力。Qt 提供了画图相关的 API,允许我们在窗口上绘制任意的图形形状来完成更复杂的界面设计。所谓的 “控件” 本质上也是通过画图的方式画上去的。
绘图 API 核心类
- QPainter:'绘画者' 或者 '画家'。用来绘图的对象,提供了一系列 drawXXX 方法,可以允许我们绘制各种图形。
- QPaintDevice:'画板'。描述了 QPainter 把图形画到哪个对象上。像咱们之前用过的 QWidget 也是一种 QPaintDevice (QWidget 是 QPaintDevice 的子类)。
- QPen:'画笔'。描述了 QPainter 画出来的线是什么样的。
- QBrush:'画刷'。描述了 QPainter 填充一个区域是什么样的。
绘制各种形状
绘制线段
void drawLine(const QPoint &p1, const QPoint &p2);
void drawLine ( int x1, int y1, int x2, int y2 );
绘制矩形
void QPainter::drawRect(int x, int y, int width, int height);
绘制圆形
void QPainter::drawEllipse(const QPoint ¢er, int rx, int ry)
绘制文本
QPainter 类中不仅提供了绘制图形的功能,还可以使用 QPainter::drawText() 函数来绘制文字,也可以使用 QPainter::setFont() 设置字体等信息。
设置画笔
QPainter 在绘制时,是有一个默认的画笔的。在使用时也可以自定义画笔。在 Qt 中,QPen 类中定义了 QPainter 应该如何绘制形状、线条和轮廓。同时通过 QPen 类可以设置画笔的线宽、颜色、样式、画刷等。
设置画刷
在 Qt 中,画刷是使用 QBrush 类来描述,画刷大多用于填充。QBrush 定义了 QPainter 的填充模式,具有样式、颜色、渐变以及纹理等属性。
绘制图片
Qt 提供了四个类来处理图像数据:QImage、QPixmap、QBitmap 和 QPicture
其他设置
移动画家位置
有时候在绘制多个图形时,想使用同一坐标位置,那么绘制出来的图形肯定会重合,此时,可以通过移动画家的位置来使图形不发生重合。
保存 / 加载画家的状态
在绘制图形的过程中,可以通过 save() 函数来保存画家的状态,使用 restore() 函数还原画家状态。
特殊的绘图设备
QPixmap
QPixmap 核心特性:使用 QPainter 直接在上面进行绘制图形。通过文件路径加载并显示图片。搭配 QPainter 的 drawPixmap() 函数,可以把这个图片绘制到一个 QLabel、QPushButton 等控件上。和系统 / 显示设备强相关,不同系统 / 显示设备下,QPixmap 的显示可能会有所差别。
QImage
QImage 的核心特性:使用 QPainter 直接在上面进行绘制图形。通过文件路径加载并显示图片。能够针对图片进行像素级别的操作(操作某个指定的像素)。
QPicture
QPicture 核心特性:使用 QPainter 直接在上面进行绘制图形。通过文件路径加载并显示图片。能够记录 QPainter 的操作步骤。
💡:Qt 中对于界面的优化美化,还涉及到很多其他的话题,如果在工作中如果涉及到了,再针对性学习即可。
Qt 动画
Qt 3D 图形
QQuick
使用第三方控件库
Qt Design Studio
——苏承栈 / 极星编程网
