绘制和填充#

绘制#

QPainter 提供了高度优化的函数,可用于绘制大部分 GUI 程序所需的绘图。它可以绘制从简单的图形元(由 QPoint、QLine、QRect、QRegionQPolygon 类表示)到复杂数据流路径等各种形状。在 Qt 中,向量路径由 QPainterPath 类表示。QPainterPath 为绘图操作提供一个容器,允许图形形状的构建和重用。

../_images/paintsystem-painterpath.png

QPainterPath

绘图路径是一个由线和曲线组成的对象。例如,矩形由线组成,而椭圆由曲线组成。

绘图路径相比普通绘图操作的主要优势在于,复杂的形状只需要创建一次,然后可以通过调用 drawPath() 函数多次进行绘制。

可以使用 QPainterPathStroker 类为给定的绘图路径生成可填充的轮廓。

线和轮廓使用 QPen 类绘制。笔是通过其样式(即其线型)、宽度、刷子、端点绘制方式(帽样式)以及两根相连线交汇处的绘制方式(连接样式)定义的。笔的刷是一个用于填充使用笔产生的笔画的 QBrush 对象,即 QBrush 类定义了填充图案。

QPainter 还可以绘制对齐的文本和位图。

在绘制文本时,使用 QFont 类指定字体。Qt 将使用具有指定属性的字体,如果不存在匹配的字体,Qt 将使用最接近的已安装字体。实际使用的字体属性可以通过使用 QFontInfo 类来获取。此外,QFontMetrics 类提供了字体度量信息,而QFontDatabase 类提供了底层窗口系统中可用字体的信息。

通常,QPainter 在“自然”坐标系中绘制,但它能够使用 QTransform 类执行视图和世界变换。有关更多信息,请参阅 坐标系 ,其中还描述了渲染过程,即逻辑表示和渲染像素之间的关系,以及抗锯齿绘制的优点。

抗锯齿绘制

当绘制时,像素渲染受控于 Antialiasing 渲染提示。使用 RenderHint 枚举指定对 QPainter 可能或可能不会遵守的标志。

Antialiasing 值表示如果可能,则引擎应启用抗锯齿功能,即通过使用不同的颜色强度来平滑边缘。

../_images/paintsystem-antialiasing.png

填充

使用 QBrush 类对形状进行填充。画刷由其颜色和其样式(即其填充模式)定义。

Qt 中的任何颜色都由 QColor 类表示,该类支持 RGB、HSV 和 CMYK 颜色模型。QColor 还支持带 Alpha 混合的轮廓和填充(指定透明效果),该类是平台和设备无关的(颜色通过 QColormap 类映射到硬件)。有关更多信息,请参阅 QColor 类文档。

可用的填充模式由Qt::BrushStyle枚举描述。这些包括从均匀颜色到非常稀疏的模式,各种线组合,渐变填充和纹理。Qt提供了QGradient类来定义自定义渐变填充,而纹理模式使用QPixmap类指定。

../_images/paintsystem-fancygradient.png

QGradient

QGradient类与QBrush类结合使用,用于指定渐变填充。

../_images/paintsystem-gradients.png

Qt目前支持三种类型的渐变填充:线性渐变在起点和终点之间插值颜色,径向渐变在焦点点和围绕它的圆形上的终点之间插值颜色,锥形渐变在中心点周围插值颜色。