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::SolidLine
  • Qt::DashLine
  • Qt::DotLine
  • Qt::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::SolidPattern
  • Qt::Dense1Pattern
  • Qt::HorPattern
  • Qt::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绘图的核心类,其使用流程通常为:

  1. paintEvent()或其他合适的地方创建QPainter对象
  2. 通过QPen设置线条属性,通过QBrush设置填充属性
  3. 使用绘图函数绘制各种图形(线条、矩形、椭圆等)
  4. 利用变换、抗锯齿等高级特性增强绘制效果
  5. 绘制完成后QPainter对象自动销毁

注意事项

  • QPainter必须在有效绘制设备上使用
  • 避免在paintEvent()中执行耗时操作
  • 合理使用缓存机制(如QPixmap)提高性能

掌握QPainter的使用是开发精美Qt界面的基础,结合QPen和QBrush的灵活配置,可以实现从简单UI到复杂图表的各种绘制需求。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐