2024年3月13日发(作者:)

下面对于QT的绘制系统做一个简要说明, 这个系统主要由三部分组成, QPainter,

QPaintDevice, QPaintEngine。

QPainter 是一个绘制接口类,提供绘制各种面向用户的命令,而QPaintDevice 是

一个QPainter绘制的目的地,相当于画布, 而QPaintEngine 是基本绘制命令的具体实

现。

我们打交道比较多的是 QPainter , 注意对于Windows平台来说,当绘制目标是一个

widget的时候,QPainter只能在 paintEvent() 里面或者由paintEvent()导致调用的函数

里面使用。

QPainter 可以定制如下的一些参数:

font() 字体,辅助接口 fontInfo() 和 fontMetrics()

brush() 定义用填充模式绘制几何形状时候的画刷,主要是画刷的颜色和模式

pen() 定义花框图的时候线条的样条和颜色

backgroundMode() 定义是否存在 background(), 分为, Qt::OpaqueMode

和 Qt::TransparentMode 两个

background() 只有当 backgroundMode() 是 Qt::OpaqueMode, pen() 是 一个

一个stripple (各种虚线。。。。), 这个描述的是背景像素的颜色值。

brushOrigin() 画刷原点,正常情况下,画刷原点就是widget背景的原点

viewport, window() 和 worldTransform(), 一起构成painter的坐标系。

hasClipping() 告诉 painter 是否执行裁剪操作,裁剪的区域是 clipRegion()。

layoutDirection() , 表明的是在绘制文字项的时候,文字的排版方向

worldMatrixEnabled() 告诉绘制流程是否开启 world 变换

viewTransformEnabled() 告诉绘制流程是否开启 view 变换

上面的设置项,很多在绘制的 device 上也会由相应的设置,比如 QWdiget::font()。

接口QPainter::begin() 或者是QPainter的构造函数,会从当前的device上拷贝那些属

性。

对于QPainter来说,内部有一个状态堆栈,任何时候都可以通过调用 save() 和

restore() 对QPainter的内部状态执行 进栈保存和压栈还原的操作。

QPainter 提供了大部分基本二维几何元的绘制命令,如: drawPoint(), drawPoints(),

drawLine(), drawRect(), drawRoundedRect(), drawEllipse(), drawArc(), drawPie(),

drawChord(), drawPolyline(), drawPolygon(), drawConvexPolygon() and

drawCubicBezier().

其中有两个遍历的函数 drawRects() and drawLines(), ,会根据当前设置的brush

和pen绘制给定的QRects数组或者QLines数组。

QPainter 还两个了两个函数 fillRect 用来填充一个 QRect, 以及 eraseRect 用来