Skip to content

绘图系统

Qt的绘图系统使用户可以在屏幕上实现自定义的图像绘画。绘图系统基于 QPainterQPaintDeviceQPaintEngine 类:

  • QPainter:用于执行绘图操作的类。
  • QPaintDevice:一个抽象的二维界面,可使用 QPainter 进行绘图。
  • QPaintEngine:为 QPainter 提供在不同设备上绘图的接口。QPaintEngine 类由 QPainterQPaintDevice 内部使用,应用程序一般无需直接操作,除非需创建自定义设备类型。

绘图设备

常见的绘图设备包括:

  • QPixmap:用于位图操作和快速绘制。针对屏幕进行特殊优化,与底层显示设备紧密相关。
  • QPicture:可记录和重现 QPainter 命令的绘图设备,平台无关(不依赖硬件)。
  • QImage:提供像素级操作,独立于硬件绘制系统。作为 QPaintDevice,可在非GUI线程中绘制,显著提升UI响应速度。
  • QBitmap:提供单色图像(色深始终为1)。占用存储空间小,适合制作光标文件和笔刷。

绘图工具

  • QPainter:核心绘图类,执行各种绘图操作。
  • QPen:设置线条属性(颜色、宽度、样式等)。
  • QBrush:填充图形内部(颜色、样式、渐变等)。

图形绘制

支持基本图形绘制(点、线、矩形、椭圆等)以及路径绘制和图形组合。

paintEvent事件和绘图

QWidget 类及其子类是最常用的绘图设备。继承自 QWidget 的类均有 paintEvent() 事件。若需在设备上绘图,只需重写此事件即可。

QPainter绘图的主要属性

使用 QPainter 绘图时,主要通过以下3个属性控制绘图元素特性:

  1. pen属性QPen 对象,控制线条颜色、宽度、线型等。
  2. brush属性QBrush 对象,设置区域填充特性(颜色、方式、渐变),支持图片材质填充。
  3. 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材质填充(需指定 texturetextureImage 图片)。

双缓冲

双缓冲是一种绘图优化技术:在绘图设备未完成绘图时,将需绘制的内容暂存到临时设备;待绘图设备准备就绪后,再同步显示内容。


作业

完成涂鸦板项目。

知识如风,常伴吾身