Qt绘图基础教程

QPainter基本绘图

  • QPainter是用来进行绘图的操作类,QPaintDevice是一个可以使用QPainter进行绘图的抽象的二维界面。
  • 一般的绘图设备包括QWidget、Qpixmap\QImage等,这些设备为QPainter提供了一个“画布”
  • 在QWidget上进行绘图,只需要重新定义paintEvent()事件,编写响应代码。基本操作是:创建一个QPainter对象获取绘图设备的接口,然后使用QPainter对象来绘图。
  • QPainter绘图的基本属性
    • pen属性:QPen对象,画笔。用于画线。可以设置线条样式(style)、端点样式(capStyle)和连接样式(joinStyle)等
    • brush属性:QBrush对象,画刷。用于设置一个区域的填充特性,包括填充样式(Style)、填充的材质图片(Texture)、渐变填充。
      • 渐变填充:线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、圆锥形渐变(QConicalGradient)
    • font属性:QFont对象。用于绘制文字。
    • 还有一些其他功能:叠加模式、旋转、缩放等。
  • QPainter绘制基本图形元件,包括点、直线椭圆、曲线等,均以drawXxxx()为形式的函数。
    • void QPainter::drawPath(constQPainterPath&path);是用于绘制复杂图形的函数,QPainterPath是一系列绘图操作的顺序集合,以便于重复使用。例如绘制多个星星。一个闭合的QPainterPath是终点和起点连接起来的绘图路径。

坐标系统和坐标变换

  • 绘图设备是物理坐标系统,通过QPainter的平移、旋转等可以得到更加容易操作的逻辑系统,QPainter还提供了视口(Viewport)和窗口(window)坐标系。默认情况下,两者是同一矩形。使用窗口的优点是:只需要按照窗口的坐标定义来绘图,而不需要管实际的物理坐标范围的大小,当实际的绘图设备大小变化时候,绘制图形大小也会自动变化。这样可以将绘图的功能和绘图设备隔离,使得绘图功能能够用在不同的设备
  • 叠加模式:void QPainter::setCompositionMode(CompositionModemode);

QGraphics View绘图架构

  • 采用QPainter绘图时,需要在绘图设备中重写paintEvent()事件。这种方法适用于绘制复杂性不高的固定图形,不能实现图件的选择、编辑、拖放和修改等。Qt绘制复杂的交互图形提供了QGraphics View绘图架构,是一种基于图形项的模型\视图模式。
  • 场景、视图和图形项

图片图片

在GraphicsView中有3个有效的坐标系统,图形项坐标、场景坐标和视图坐标。所有的鼠标事件、拖放事件的坐标首先是由视图坐标定义的,然后用户需要将这些坐标映射为场景坐标,以便于和图形项交互。场景坐标是图形项的基础坐标。不同坐标系统之间可以采用坐标映射。

QtChart图表绘制

  • 可以进行少量的数据进行绘制相关的图表,在Qt帮助文档有各种的demo,如果大量的数据可以采用QCustomPlot
  • QtChart支持折线图、柱状图、饼图等图表。核心组件是QChartView和QChart