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 用来
发布评论