绘图系统
Qt的绘图系统使用户可以在屏幕上实现自定义的图像绘画。绘图系统基于 QPainter、QPaintDevice 和 QPaintEngine 类:
- QPainter:用于执行绘图操作的类。
- QPaintDevice:一个抽象的二维界面,可使用
QPainter进行绘图。 - QPaintEngine:为
QPainter提供在不同设备上绘图的接口。QPaintEngine类由QPainter和QPaintDevice内部使用,应用程序一般无需直接操作,除非需创建自定义设备类型。
绘图设备
常见的绘图设备包括:
- QPixmap:用于位图操作和快速绘制。针对屏幕进行特殊优化,与底层显示设备紧密相关。
- QPicture:可记录和重现
QPainter命令的绘图设备,平台无关(不依赖硬件)。 - QImage:提供像素级操作,独立于硬件绘制系统。作为
QPaintDevice,可在非GUI线程中绘制,显著提升UI响应速度。 - QBitmap:提供单色图像(色深始终为1)。占用存储空间小,适合制作光标文件和笔刷。
绘图工具
- QPainter:核心绘图类,执行各种绘图操作。
- QPen:设置线条属性(颜色、宽度、样式等)。
- QBrush:填充图形内部(颜色、样式、渐变等)。
图形绘制
支持基本图形绘制(点、线、矩形、椭圆等)以及路径绘制和图形组合。
paintEvent事件和绘图
QWidget 类及其子类是最常用的绘图设备。继承自 QWidget 的类均有 paintEvent() 事件。若需在设备上绘图,只需重写此事件即可。
QPainter绘图的主要属性
使用 QPainter 绘图时,主要通过以下3个属性控制绘图元素特性:
- pen属性:
QPen对象,控制线条颜色、宽度、线型等。 - brush属性:
QBrush对象,设置区域填充特性(颜色、方式、渐变),支持图片材质填充。 - font属性:
QFont对象,绘制文字时设置字体样式、大小等。
QPen的主要功能
QPen 用于设置绘图时的线条特性:
| 函数原型 | 功能作用 |
|---|---|
void setColor(QColor &color) | 设置画笔颜色(线条颜色),参数为 QColor 类型。 |
void setWidth(int width) | 设置线条宽度,参数为 int 类型。 |
void setStyle(Qt::PenStyle style) | 设置线条样式,参数为 Qt::PenStyle 枚举类型。 |
void setCapStyle(Qt::PenCapStyle style) | 设置线条端点样式,参数为 Qt::PenCapStyle 枚举类型。 |
void setJoinStyle(Qt::PenJoinStyle style) | 设置连接样式,参数为 Qt::PenJoinStyle 枚举类型。 |
QBrush的主要功能
QBrush 定义 QPainter 绘图时的填充特性:
| 函数原型 | 功能 |
|---|---|
void setColor(QColor &color) | 设置画刷颜色(实体填充时的填充颜色)。 |
void setStyle(Qt::BrushStyle style) | 设置画刷样式,参数为 Qt::BrushStyle 枚举类型。 |
void setTexture(QPixmap &pixmap) | 设置 QPixmap 图片作为画刷材质,样式自动设为 Qt::TexturePattern。 |
void setTextureImage(QImage &image) | 设置 QImage 图片作为画刷材质,样式自动设为 Qt::TexturePattern。 |
画刷样式枚举(Qt::BrushStyle)
| 枚举常量 | 描述 |
|---|---|
Qt::NoBrush | 不填充。 |
Qt::SolidPattern | 单一颜色填充。 |
Qt::HorPattern | 水平线填充。 |
Qt::VerPattern | 垂直线填充。 |
Qt::LinearGradientPattern | 线性渐变(需使用 QLinearGradient 类对象)。 |
Qt::RadialGradientPattern | 辐射渐变(需使用 QRadialGradient 类对象)。 |
Qt::ConicalGradientPattern | 圆锥渐变(需使用 QConicalGradient 类对象)。 |
Qt::TexturePattern | 材质填充(需指定 texture 或 textureImage 图片)。 |
双缓冲
双缓冲是一种绘图优化技术:在绘图设备未完成绘图时,将需绘制的内容暂存到临时设备;待绘图设备准备就绪后,再同步显示内容。
作业
完成涂鸦板项目。
