Qt自定义控件(2)——QPainter画家
·
QPainter画家
Qt的QPainter类是用于在Qt应用程序中执行2D绘图的核心类,它可以在几乎任何QPaintDevice上进行绘制,包括QWidget、QPixmap、QImage等。下面从初始化、画笔和画刷设置、图形绘制及其他功能方面进行详细介绍:
一、QPainter初始化
QPainter通常在QWidget的paintEvent()函数中创建,或在需要绘制的地方使用。其生命周期需要严格控制,必须在绘制设备的有效状态下使用。
示例代码:
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this); // this 为当前QWidget
// 开始绘制...
}
关键特性:
- 构造函数:
QPainter(QPaintDevice *device) - 绘制设备:必须是QPaintDevice的子类(如QWidget、QPixmap等)
- 生命周期:绘制完成后自动销毁,或调用
end()手动结束
二、设置画笔(QPen)
QPen用于绘制图形的轮廓线,控制线条的颜色、宽度、样式等属性。
关键API:
// 基本设置
painter.setPen(Qt::red); // 设置颜色
painter.setPen(QPen(Qt::blue, 2)); // 设置颜色和宽度
painter.setPen(Qt::DotLine); // 设置线条样式
// 高级设置
QPen pen(Qt::green, 3, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
painter.setPen(pen);
线条样式:
Qt::SolidLineQt::DashLineQt::DotLineQt::DashDotLine等
三、设置画刷(QBrush)
QBrush用于填充图形的内部区域,支持纯色、渐变和纹理填充。
关键API:
// 纯色填充
painter.setBrush(Qt::yellow); // 纯色填充
// 渐变填充
QLinearGradient gradient(0, 0, 100, 100);
gradient.setColorAt(0, Qt::white);
gradient.setColorAt(1, Qt::black);
painter.setBrush(gradient); // 线性渐变填充
// 纹理填充
QPixmap texture("texture.png");
painter.setBrush(QBrush(texture)); // 纹理填充
填充样式:
Qt::SolidPatternQt::Dense1PatternQt::HorPatternQt::CrossPattern等
四、绘制基本图形
QPainter提供了丰富的绘图函数,用于绘制各种基本图形。
关键API:
// 绘制线条
painter.drawLine(10, 10, 100, 100); // 两点确定一条直线
// 绘制矩形
painter.drawRect(50, 50, 200, 100); // x, y, width, height
// 绘制椭圆/圆
painter.drawEllipse(100, 100, 150, 80); // 椭圆
painter.drawEllipse(200, 200, 50, 50); // 圆
// 绘制多边形
QPoint points[4] = {QPoint(50, 50), QPoint(100, 50),
QPoint(100, 100), QPoint(50, 100)};
painter.drawPolygon(points, 4); // 四边形
// 绘制文本
painter.drawText(100, 150, "Hello, Qt!"); // 绘制文本
// 绘制图像
QPixmap pixmap("image.png");
painter.drawPixmap(200, 200, pixmap); // 绘制图像
五、高级特性
QPainter还支持多种高级绘图功能:
1. 抗锯齿:
painter.setRenderHint(QPainter::Antialiasing); // 启用抗锯齿
2. 变换:
painter.translate(100, 100); // 平移坐标系
painter.rotate(45); // 旋转45度
painter.scale(2, 2); // 缩放2倍
3. 裁剪区域:
painter.setClipRect(50, 50, 100, 100); // 设置裁剪区域
4. 渐变填充:
QRadialGradient radialGrad(100, 100, 50); // 径向渐变
radialGrad.setColorAt(0, Qt::white);
radialGrad.setColorAt(1, Qt::blue);
painter.setBrush(radialGrad);
六、总结
QPainter是Qt中实现2D绘图的核心类,其使用流程通常为:
- 在
paintEvent()或其他合适的地方创建QPainter对象 - 通过QPen设置线条属性,通过QBrush设置填充属性
- 使用绘图函数绘制各种图形(线条、矩形、椭圆等)
- 利用变换、抗锯齿等高级特性增强绘制效果
- 绘制完成后QPainter对象自动销毁
注意事项:
- QPainter必须在有效绘制设备上使用
- 避免在
paintEvent()中执行耗时操作 - 合理使用缓存机制(如QPixmap)提高性能
掌握QPainter的使用是开发精美Qt界面的基础,结合QPen和QBrush的灵活配置,可以实现从简单UI到复杂图表的各种绘制需求。
更多推荐
所有评论(0)