QT绘图知识点总结

QT提供了强大的2D绘图功能,主要通过QPainter类和相关工具类实现。以下是QT绘图的主要知识点总结:

一、绘图系统基础

  1. QPainter - 核心绘图类

    • 提供大量绘图函数:点、线、矩形、椭圆、多边形、文本等
    • 支持多种绘图设备:QPixmap、QImage、QWidget等
    • 基本使用模式:
      QPainter painter(this);
      painter.setPen(Qt::blue);
      painter.drawLine(0, 0, 100, 100);
      
  2. 绘图设备

    • QWidget:在控件上绘图
    • QPixmap:离屏像素图,适合屏幕显示
    • QImage:独立于硬件的图像表示,支持像素级操作
    • QPicture:记录和重放绘图命令

二、基本绘图操作

  1. 基本图形绘制

    • 点:drawPoint()
    • 线:drawLine()
    • 矩形:drawRect()
    • 圆/椭圆:drawEllipse()
    • 多边形:drawPolygon()
    • 文本:drawText()
    • 图像:drawImage(), drawPixmap()
  2. 路径绘图(QPainterPath)

    • 创建复杂形状
    • 组合基本图形
    • 示例:
      QPainterPath path;
      path.moveTo(20, 80);
      path.lineTo(20, 30);
      path.cubicTo(80, 0, 50, 50, 80, 80);
      painter.drawPath(path);
      

三、绘图属性设置

  1. 画笔(QPen)

    • 控制线条样式、颜色、宽度等
    • 示例:
      QPen pen(Qt::green, 3, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
      painter.setPen(pen);
      
  2. 画刷(QBrush)

    • 控制填充样式、颜色、渐变等
    • 示例:
      QBrush brush(Qt::blue, Qt::Dense4Pattern);
      painter.setBrush(brush);
      
  3. 字体(QFont)

    • 控制文本显示样式
    • 示例:
      QFont font("Arial", 12, QFont::Bold);
      painter.setFont(font);
      

四、坐标系统与变换

  1. 坐标系统

    • 逻辑坐标与物理坐标
    • 视口(Viewport)和窗口(Window)概念
  2. 坐标变换

    • 平移:translate()
    • 缩放:scale()
    • 旋转:rotate()
    • 剪切:shear()
    • 保存/恢复状态:save(), restore()
  3. 抗锯齿

    • setRenderHint(QPainter::Antialiasing)

五、高级绘图技术

  1. 渐变填充(QGradient)

    • 线性渐变(QLinearGradient)
    • 径向渐变(QRadialGradient)
    • 锥形渐变(QConicalGradient)
    • 示例:
      QLinearGradient gradient(0, 0, 100, 100);
      gradient.setColorAt(0, Qt::white);
      gradient.setColorAt(1, Qt::black);
      painter.setBrush(gradient);
      
  2. 合成模式(QPainter::CompositionMode)

    • 控制绘图时的像素混合方式
    • QPainter::CompositionMode_SourceOver(默认)
  3. 绘制SVG(QSvgRenderer)

    • 渲染矢量图形

六、绘图优化

  1. 双缓冲技术

    • 先在QPixmap上绘图,再绘制到控件
    • 避免闪烁
  2. 局部更新

    • 使用update(const QRect &)只更新需要重绘的区域
  3. 绘图事件

    • 重写paintEvent(QPaintEvent *)实现自定义绘图

七、实例代码

void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    
    // 设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);
    
    // 绘制渐变背景
    QLinearGradient bgGradient(0, 0, width(), height());
    bgGradient.setColorAt(0, Qt::white);
    bgGradient.setColorAt(1, Qt::lightGray);
    painter.fillRect(rect(), bgGradient);
    
    // 设置画笔和画刷
    QPen pen(Qt::darkBlue, 2);
    painter.setPen(pen);
    QBrush brush(Qt::yellow);
    painter.setBrush(brush);
    
    // 绘制椭圆
    painter.drawEllipse(50, 50, 100, 60);
    
    // 绘制文本
    QFont font("Arial", 16, QFont::Bold);
    painter.setFont(font);
    painter.drawText(50, 150, "QT绘图示例");
    
    // 绘制路径
    QPainterPath path;
    path.moveTo(200, 50);
    path.lineTo(250, 150);
    path.lineTo(150, 150);
    path.closeSubpath();
    painter.drawPath(path);
}

八、常见应用场景

  1. 自定义控件开发
  2. 数据可视化(图表、曲线等)
  3. 图像处理应用
  4. 游戏开发
  5. CAD类软件

掌握QT绘图系统可以创建丰富多样的图形界面和可视化效果,是QT开发中的重要技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值