QPainter是 Qt 框架中用于执行 2D 图形绘制的核心类,它本身不直接表示画布,而是作用于QPaintDevice(如 QWidget、QImage、QPixmap 等)之上。其“成员构成”可以从两个维度理解:
一、辅助绘图的成员对象(绘图属性)
这些是QPainter内部维护的状态对象,用于控制绘制样式:
| 成员类型 | 作用 | 常用设置方法 |
|---|---|---|
| QPen | 控制线条、轮廓的样式(颜色、宽度、线型等) | setPen()/pen() |
| QBrush | 控制填充区域的样式(颜色、图案、渐变等) | setBrush()/brush() |
| QFont | 控制文本绘制的字体 | setFont()/font() |
| QTransform / QMatrix | 控制坐标系变换(平移、旋转、缩放等) | translate(),rotate(),scale(),setWorldTransform() |
| CompositionMode | 控制图像合成模式(如叠加、正片叠底等) | setCompositionMode() |
| RenderHint | 控制渲染质量提示(如抗锯齿、平滑缩放等) | setRenderHint() |
| Clip Region/Path | 定义裁剪区域,限制绘制范围 | setClipRect(),setClipPath() |
| Brush Origin | 定义画刷图案的起始偏移点 | setBrushOrigin() |
✅ 这些状态在调用
begin()或构造QPainter(device)时会被重置为默认值。
二、支持的绘图内容类型(可绘制对象)
QPainter可以绘制以下类型的图形或内容:
| 绘制内容 | 对应方法示例 |
|---|---|
| 基本几何图形 | drawLine(),drawRect(),drawEllipse(),drawPolygon() |
| 路径(复杂形状) | drawPath(const QPainterPath &) |
| 文本 | drawText(),boundingRect()(用于计算文本区域) |
| 图像 | drawPixmap(),drawImage() |
| 自定义指令记录 | 通过QPicture记录/重放绘图命令 |
📌 注意:
QPixmap适合屏幕显示(硬件加速),QImage适合像素级操作和文件读写。
三、关键成员函数分类
1. 生命周期管理
QPainter(QPaintDevice *device):构造并自动begin()bool begin(QPaintDevice *device)bool end()
2. 状态保存与恢复
save()/restore():压栈/弹栈当前所有绘图状态(pen, brush, transform 等)
3. 坐标与视口控制
setWindow()/setViewport():逻辑坐标 ↔ 设备坐标的映射worldMatrix()/setWorldTransform():全局坐标变换
4. 裁剪控制
setClipRect(),setClipPath(),setClipping(bool)
5. 渲染优化提示
painter.setRenderHint(QPainter::Antialiasing, true); painter.setRenderHint(QPainter::TextAntialiasing, true); painter.setRenderHint(QPainter::SmoothPixmapTransform, true);四、典型使用结构(在paintEvent中)
void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 自动 begin(this) painter.setRenderHint(QPainter::Antialiasing); // 设置画笔和画刷 painter.setPen(QPen(Qt::blue, 2)); painter.setBrush(Qt::yellow); // 绘制一个圆 painter.drawEllipse(50, 50, 100, 100); // 绘制文本 painter.setFont(QFont("Arial", 16)); painter.drawText(60, 120, "Hello QPainter"); // 析构时自动调用 end() }总结
QPainter的“成员构成”本质上是:
- 一组可配置的绘图状态(Pen/Brush/Font/Transform 等)
- 一套丰富的绘图操作接口(drawXXX)
- 对 QPaintDevice 的抽象访问能力
它与QPaintDevice(画布)和QPaintEngine(底层引擎)共同构成 Qt 的2D 绘图系统三要素。
如需更深入,可结合QPainterPath实现复杂路径绘制,或使用QPicture实现绘图指令的序列化与重放。