本页内容

绘制与填充

绘制

QPainter 提供了高度优化的函数,可完成大多数图形用户界面程序所需的大部分绘制任务。它能够绘制从简单的图形基元(由QPoint 、QLine 、QRect 、QRegion 和QPolygon 类表示)到矢量路径等复杂形状的一切内容。在Qt中,矢量路径由QPainterPath 类表示。QPainterPath 为绘制操作提供了一个容器,从而能够构建和复用图形形状。

Qt 标志

QPainterPath

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

绘制路径相对于普通绘图操作的主要优势在于,复杂形状只需创建一次;之后只需调用QPainter::drawPath()函数,即可多次绘制该形状。

QPainterPath 对象可用于填充、描边和裁剪。要为给定的绘图路径生成可填充的轮廓,请使用QPainterPathStroker 类。

线条和轮廓通过QPen 类进行绘制。一支画笔由其样式(即线型)、宽度、画笔、端点绘制方式(cap-style)以及两条相连线条之间的连接方式(join-style)来定义。 画笔的笔刷是一个QBrush 对象,用于填充由该画笔生成的笔画,即QBrush 类定义了填充图案。

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

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

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

抗锯齿绘制

在绘制时,像素渲染由QPainter::Antialiasing 渲染提示控制。QPainter::RenderHint 枚举用于向QPainter 指定标志,但具体是否被某个引擎采纳则因引擎而异。

QPainter::Antialiasing 值表示引擎应在可能的情况下对基元边缘进行抗锯齿处理,即通过使用不同的颜色强度来平滑边缘。

显示了使用抗锯齿渲染的绘图的截图

填充

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

Qt 中的任何颜色均由QColor 类表示,该类支持 RGB、HSV 和 CMYK 颜色模型。QColor 还支持带 alpha 混合的轮廓和填充(指定透明度效果),且该类与平台和设备无关。有关更多信息,请参阅QColor 类文档。

可用的填充图案由Qt::BrushStyle 枚举描述。这些图案包括从纯色到非常稀疏的图案、各种线条组合、渐变填充以及纹理等基本图案。Qt 提供了QGradient 类来定义自定义渐变填充,而纹理图案则通过QPixmap 类进行指定。

渐变示例的屏幕截图

QGradient

QGradient 类需与QBrush 类配合使用,以指定渐变填充。

一幅展示渐变三种不同支持使用方式的插图

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

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.