基础图形绘制

来源:互联网 发布:淘宝上怎么添加旺旺 编辑:程序博客网 时间:2024/05/22 15:06

QPainter(Qt中的画家):能够绘制各种图形,拥有绘图所需的画笔(QPen),画刷(QBrush),字体(QFont)

QPaintDevice(Qt中的画布):QPainter的绘图板,所有的QWidget类都继承自QPaintDevice

重要规则:

只能在QWidget::paintEvent中绘制图形

void paintEvent(QPaintEvent* event){    QPainter painter(this);    painter.drawLine(QPoint(30,30),QPoint(100,100));    }

动态绘制图形

  • 根据需要确定参数对象(绘图类型,点坐标,角度等)
  • 将参数对象存入数据集合中(如:链表)
  • 在paintEvent函数中遍历数据集合
  • 根据参数对象绘制图形(update())

  • QPainter使用逻辑坐标系绘制图形

  • 逻辑坐标系中图形的大小和位置经由转换后绘制与具体设备
  • 默认情况下的逻辑坐标系与物理坐标系完全一致

视口:物理坐标系中一个任意指定的矩形
窗口:逻辑坐标系下对应到物理坐标系中的相同矩形

这里写图片描述

这里写图片描述

正弦波形绘图实例

  • 定义视口矩形和逻辑坐标系
  • 定义画笔并填充窗口底色
  • 根据实际问题中的波形函数绘图(drawPoint())

这里写图片描述

QPainter使用逻辑坐标系进行绘图
逻辑坐标系能够变换到物理坐标系
视口与窗口指不同坐标系下的同一个矩形
窗口用于逻辑坐标系下的图形绘制
视口用于实际物理设备上的图形显示

自由绘图解决方案

  • 以鼠标按下为开始,记录开始坐标
    • mousePressEvent
  • 记录鼠标移动时经过的像素坐标
    • mouseMoveEvent
  • 以鼠标释放为结束,记录结束坐标
    • mouseReleaseEvent
  • 按照记录顺序在两两坐标之间绘制直线
    • paintEvent

如何实现基础图形动态绘制

分析:基础图形的目标是固定的,但是开始点与结束点的不同会导致最终形状的差异;因此,鼠标移动时根据当前坐标实时绘图,鼠标松开时确定最终图形

基本图形绘制需要在鼠标按下并移动时进行动态绘图,但是,无论何时都只需要记录两个坐标值

基础图形绘制解决方案

  • 以鼠标按下为开始,记录开始坐标
    • mousePressEvent
  • 记录鼠标移动时经过的每个坐标作为临时结束坐标
    • mouseMoveEvent
  • 以鼠标释放为结束,记录最终结束坐标
    • mouseReleaseEvent
  • 在开始坐标和结束坐标之间绘制目标图形
    • paintEvent

这里写图片描述

原创粉丝点击