QPainter#

QPainter 类在控件和其他绘图设备上执行低级别绘图。更多...

继承自: QStylePainter

概述#

方法#

注意

此文档可能包含自动从C++翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告诉我们。

详细描述#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

QPainter 提供了高度优化的函数来执行大多数GUI程序所需的绘图任务。它可以绘制从简单线条到复杂图形(如饼图和弧线)的一切。它还可以绘制对齐文本和光标图。通常,它在“自然”坐标系中绘制,但也支持视图和世界变换。《a class="reference internal" href="#PySide6.QtGui.QPainter" title="PySide6.QtGui.QPainter">QPainter 可以在继承自QPaintDevice类的任何对象上操作。

QPainter 的常见用法是在小部件的绘图事件内部:构建并自定义(例如设置画笔或画刷)绘图。然后绘制。记住在绘制后销毁QPainter对象。例如

def paintEvent(self, arg__0):

    painter = QPainter(self)
    painter.setPen(Qt.blue)
    painter.setFont(QFont("Arial", 30))
    painter.drawText(rect(), Qt.AlignCenter, "Qt")

QPainter 的核心功能是绘图,但该类还提供了一些函数,允许您自定义QPainter的设置和其渲染质量,以及其他用于启用裁剪的函数。此外,您还可以通过指定绘图器的合成模式来控制不同形状如何合并在一起。

isActive() 函数表示绘图者是否处于活动状态。绘图者通过 begin() 函数和接受一个 QPaintDevice 参数的构造函数被激活。而 end() 函数以及析构函数会使其失效。

QPaintDeviceQPaintEngine 类一起,QPainter 构成了 Qt 绘图系统的基石。 QPainter 类用于执行绘图操作。 QPaintDevice 表示可以用 QPainter 绘图的设备。 QPaintEngine 提供绘图者绘制到不同类型设备上的接口。如果绘图者处于活动状态,device() 返回绘图者所绘制的绘图设备,而 paintEngine() 返回当前绘图者正在操作的绘图引擎。更多信息,请参阅绘图系统

有时可能需要让其他人在一个不寻常的 QPaintDevice 上绘图。 QPainter 支持一个静态函数来完成此操作,即 setRedirected()。

警告

当绘图设备是一个小部件(widget)时,只能在 paintEvent() 函数内部或由 paintEvent() 调用的函数中调用 QPainter

设置

有几种设置可以自定义,以使 QPainter 按您的要求进行绘图

请注意,这些设置中的一些反映了某些绘图设备的设置,例如 QWidget::font()。函数 begin()(或等价的 QPainter 构造函数)会从绘图设备复制这些属性。

您可以在任何时候通过调用 QPaintersave() 函数来保存 QPainter 的状态,该函数会将所有可用的设置保存在内部堆栈上。函数 restore() 会弹出它们。

绘图

QPainter 提供了绘制大多数原语的功能:drawPoint()drawPoints()drawLine()drawRect()drawRoundedRect()drawEllipse()drawArc()drawPie()drawChord()drawPolyline()drawPolygon()drawConvexPolygon() 和 drawCubicBezier()。便利函数 drawRects()drawLines() 会使用当前的笔和画刷在给定的 QRect 或 QLines 数组中绘制指定数量的矩形或线条。

QPainter还提供了fillRect()函数,用于填充给定的QRect,使用指定的QBrush,并提供eraseRect()函数来擦除给定矩形内部的区域。

所有这些函数都有整数和浮点版本。

qpainter-basicdrawing1

基本绘图示例

基本绘图示例展示了如何使用QPainter类以各种样式显示基本的图形元素。

如果您需要绘制复杂形状,尤其是在需要重复绘制时,考虑创建一个QPainterPath并使用drawPath()检索。

绘图路径示例

QPainterPath类提供了一个用于绘画操作的容器,可以用来构建和重用图形形状。

绘图路径示例展示了如何使用绘图路径来构建用于绘制的复杂形状。

qpainter-painterpaths2

QPainter还提供了fillPath()函数,用于使用指定的QBrush填充给定的QPainterPath,还提供了strokePath()函数,用于绘制给定路径的轮廓(即“勾画”路径)。

还可以参考矢量变形示例,此示例显示如何使用高级矢量技术使用QPainterPath来绘制文本,梯度示例显示了Qt中可用的不同类型的梯度,以及路径描边示例显示了Qt的内置虚线图案,并展示了如何使用自定义图案来扩展可用图案的范围。

矢量变形

梯度

路径描边

qpainter-vectordeformation3

qpainter-gradients4

qpainter-pathstroking5

文本绘制使用drawText()完成。当您需要精确的位置时,boundingRect()将告诉您给定drawText()命令将绘制的位置。

绘图位图和图像

有绘制位图/图像的函数,分别是 drawPixmap()drawImage()drawTiledPixmap()drawPixmap()drawImage() 的结果相同,除了 drawPixmap() 在屏幕上更快之外,drawImage() 在 QPrinter 或其他设备上可能更快。

还有一个 drawPicture() 函数,它可以绘制整个 QPicture 的内容。这是唯一一个忽略所有绘图设置的功能,因为 QPicture 有自己的设置。

绘制高分辨率位图和图像版本#

高分辨率版本的位图具有大于1的 设备像素比 值(参见 QImageReaderdevicePixelRatio())。如果它与底层 QPaintDevice 的值匹配,它将直接绘制到设备上,不应用任何额外的转换。

例如,当在一个设备像素比为2的高DPI屏幕上绘制一个64x64像素大小的 QPixmap 时,这也是这种情况。请注意,此时位图在实际的 用户空间 中是32x32像素。基于位图大小计算布局几何形状的 Qt 中的代码路径将使用此大小。这样做的净效果是位图以高DPI位图的形式显示,而不是大位图。

渲染质量#

要使用 QPainter 获取最佳渲染结果,应使用平台独立的 QImage 作为绘图设备;也就是说,使用 QImage 将确保在任何平台上结果都有相同的像素表示。

《QPainter》类还提供了控制渲染质量的手段,通过其RenderHint枚举类型以及对浮点精度支持的实现:所有绘制原语的功能都有相应的浮点版本。

painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter))

这些通常与Antialiasing渲染提示一起使用。

painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing, True)

比较同心圆中int型和float型的,以及是否启用抗锯齿渲染。使用浮点精度版本可以产生均匀分布的环。启用抗锯齿渲染则会产生平滑的圆形。

qpainter-concentriccircles6

RenderHint枚举类型为QPainter指定了标志位,在某些引擎中可能会被尊重或忽略。Antialiasing表明引擎应在可能的情况下抗锯齿原语边缘,TextAntialiasing表明引擎应在可能的情况下抗锯齿文本,而SmoothPixmapTransform表明引擎应使用平滑位图变换算法。

renderHints()函数返回指定了在此画家中设置的渲染提示的标志。使用setRenderHint()函数设置或清除当前设置的RenderHints

坐标变换

通常,QPainter在其设备自己的坐标系(通常是像素为单位)上操作,但QPainter对坐标变换具有良好的支持。

最常用的变换包括缩放、旋转、平移和剪切。使用scale()函数以给定的偏移缩放坐标系,使用rotate()函数顺时针旋转它,使用translate()进行平移(即向点添加给定的偏移)。您还可以使用shear()函数旋转坐标系。参见仿射变换示例,以查看剪切坐标系的可视化。

还可以参考变换示例,该示例展示了变换如何影响 QPainter 绘制图形元素的方式。特别是它展示了变换顺序如何影响结果。

仿射变换示例

仿射变换示例展示了 Qt 在绘画操作中执行仿射变换的能力。演示还允许用户实验变换操作并立即查看结果。

qpainter-affinetransformations11

所有的变换操作都会作用于变换的 worldTransform()。一个矩阵将平面上的一个点转换到另一个点。有关变换矩阵的更多信息,请参阅坐标系QTransform 文档。

setWorldTransform() 函数可以替换或添加当前设置的 worldTransform()resetTransform() 函数重置使用 translate()scale()shear()rotate()setWorldTransform()setViewport()setWindow() 函数进行的任何变换。 deviceTransform() 返回从逻辑坐标转换到平台相关的绘制装置的设备坐标的矩阵。后一个函数仅在使用依赖于平台绘制命令的平台相关句柄时需要,且平台不会原生地执行转换。

在使用 QPainter 绘图时,我们使用逻辑坐标来指定点,然后这些坐标被转换为绘图设备的物理坐标。逻辑坐标到物理坐标的映射是由 QPaintercombinedTransform() 处理的,这是一个结合了 viewport()window()worldTransform() 的函数。其中,viewport() 表示指定任意矩形的物理坐标,window() 在逻辑坐标中描述相同的矩形,而 worldTransform() 与变换矩阵相同。

请参阅坐标系

裁剪#

QPainter 可以将任何绘图操作裁剪到一个矩形、一个区域或一个矢量路径。当前的裁剪可以通过函数 clipRegion()clipPath() 获取。是路径还是区域更受青睐(更快)取决于底层 paintEngine() 。例如,QImage 绘图引擎偏好路径,而 X11 绘图引擎偏好区域。裁剪的设置是在绘图引擎的逻辑坐标中完成的。

QPainter 的裁剪之后,绘图设备也可能进行裁剪。例如,大多数小部件会裁剪掉子小部件使用的像素,大多数打印机会裁剪纸张边缘附近的一个区域。这种附加裁剪不会反映在 clipRegion()hasClipping() 的返回值中。

合成模式#

QPainter 提供了 CompositionMode 枚举,该枚举定义了 Porter-Duff 规则用于数字图像合成;它描述了一个将一个图像(源)中的像素与另一个图像(目标)中的像素结合的模型。

最常见的两种合成形式是 SourceSourceOverSource 用于在绘图设备上绘制不透明对象。在这种模式下,源图像中的每个像素将替换目标图像中相应的像素。在 SourceOver 合成模式下,源对象是透明的,并且绘制在目标对象之上。

请注意,合成转换是按像素操作的。因此,使用图形原语本身和其包围矩形之间有区别:包围矩形包含 alpha == 0 的像素(即原始周围的像素)。这些像素将覆盖其他图像的像素,实际上清除这些像素,而原始图形仅覆盖其自己的区域。

qpainter-compositiondemo12

合成模式示例

合成模式示例在 Qt 的示例目录中提供,您可以使用它实验各种合成模式并立即看到结果。

局限性#

如果您在使用基于光栅的绘图引擎的 Qt 坐标,请注意,虽然可以使用大于 +/- 2 15 的坐标,但在此范围之外的任何绘图均无法保证显示;绘图可能会被剪裁。这是因为实现中使用了 short int

Qt 的画笔生成的轮廓在处理弯曲形状时仅是近似。通常无法使用另一个贝塞尔曲线段来表示贝塞尔曲线段的轮廓,因此 Qt 使用多个较小的曲线来近似曲线轮廓。出于性能原因,Qt 对用于这些轮廓的曲线数量有限制,因此当使用大线条宽度或缩放时,轮廓误差会增加。要生成误差较小的轮廓,可以使用具有设置曲线阈值成员函数的 QPainterPathStroker 类,用户可以指定错误容忍度。另一种解决方案是将路径首先转换为多边形,然后绘制多边形。

性能#

QPainter 是一个功能丰富的框架,它允许开发者执行各种图形操作,例如渐变、合成模式以及矢量图形。而且,QPainter 可以在各种各样的硬件和软件堆叠上执行这些操作。自然地,底层硬件和软件的组合对性能有一些影响,并且由于排列组合的数量巨大,确保每一个操作在所有合成模式、画笔、裁剪、变换等各种组合下都很快,几乎是一项不可能的任务。作为一个折衷方案,我们选择了 QPainter API 和后端的一部分,在这里,性能保证在我们给定的硬件和软件组合下尽可能好。

我们将关注的、以高性能引擎为主的后端有:

  • 光线 — 这个后端使用纯软件实现所有渲染,始终用于将内容渲染到 QImages 中。为了获得最佳性能,仅使用 Format_ARGB32_PremultipliedFormat_RGB32Format_RGB16 格式。其他格式,包括 Format_ARGB32,性能明显较差。此引擎默认用于 QWidget 和 QPixmap

  • OpenGL 2.0 (ES) — 这个后端是硬件加速图形的主要后端。它可以在支持 OpenGL 2.0 或 OpenGL/ES 2.0 规范的桌面计算机和嵌入式设备上运行。这包括最近几年生产的几乎所有图形芯片。可以通过将 QPainter 应用于 QOpenGLWidget 上来启用此引擎。

这些操作包括:

  • 简单的变换,即平移和缩放,以及 0、90、180、270 度的旋转。

  • 与简单的变换和透明度结合使用 drawPixmap(),在没有 smooth transformation 模式(未将 QPainter::SmoothPixmapTransform 作为渲染提示启用)的情况下。

  • 使用纯色、双色线性渐变和简单变换进行矩形填充。

  • 使用简单的变换和相交裁剪进行矩形裁剪。

  • 合成模式:QPainter::CompositionMode_SourceCompositionMode_SourceOver

  • 使用纯色和双色线性渐变填充圆角矩形。

  • 通过 qDrawBorderPixmap 使用 3x3 补丁 pixmap。

此列表提供了一种指示,说明在关键性能的应用程序中哪些特性可以安全使用的参考。对于某些设置,其他操作也可能很快,但在大规模使用之前,建议在最终运行的系统上进行基准测试和验证。在结果缓存到QPixmap时,一些成本较高的操作也是可以接受的。

另请参阅

QPaintDevice QPaintEngine Qt SVGBasic Drawing ExampleDrawing Utility Functions

class RenderHint#

(继承自 enum.Flag) Renderhints 用于指定用于 QPainter 的标志,特定的引擎可能会或可能不会尊重这些标志。

常量

描述

QPainter.Antialiasing

指示引擎应在可能的情况下对原语边缘进行抗锯齿处理。

QPainter.TextAntialiasing

指示引擎应在可能的情况下对文本进行抗锯齿处理。要强制关闭文本的抗锯齿,不要使用此提示,而是在您的字体样式策略上设置 NoAntialias

QPainter.SmoothPixmapTransform

指示引擎应使用平滑的位图变换算法(如双线性)而不是最近邻。

QPainter.VerticalSubpixelPositioning

在字体引擎支持的情况下,允许文本在水平和垂直方向以像素分数的大小定位。这目前由 Freetype 在所有平台上支持,当提示偏好设置为 PreferNoHinting 且 macOS 上支持。对于大多数用例,这不会提高视觉效果,但可能会增加内存消耗并降低文本渲染性能。因此,除非使用场景确实需要,否则不建议启用此选项。一种可能的使用场景是将位图与其它视觉原语对齐。这个值是在 Qt 6.1 中添加的。

QPainter.LosslessImageRendering

尽可能使用无损图像渲染。目前,此提示仅在 QPainter 通过 QPrinter 或 QPdfWriter 输出 PDF 文件时使用,其中 drawImage() / drawPixmap() 调用将使用无损压缩算法而不是有损 JPEG 压缩来编码图像。这个值是在 Qt 5.13 中添加的。

QPainter.NonCosmeticBrushPatterns

使用预设图案样式中的刷子绘图时,应同时转换图案和待绘制对象。默认将图案视为装饰性,使图案像素直接映射到设备像素,不受任何活动变换的影响。此功能自 Qt 6.4 中添加。

另请参阅

renderHints() setRenderHint() 渲染质量

class PixmapFragmentHint#

常量

描述

QPainter.OpaqueHint

(继承 enum Flag) 表示要绘制的位图片段是不透明的。不透明片段可能绘制得更快。

另请参阅

drawPixmapFragments() PixmapFragment

新功能自 4.7 版本。

class CompositionMode#

定义了支持的数字图像合成模式。合成模式用于指定一个图像(源)中的像素如何与另一个图像(目标)中的像素合并。

请注意,具有 RasterOp 前缀的光栅运算模式仅在 X11 和光栅绘图引擎中原生支持。这意味着在 Mac 上使用这些模式的唯一方法是借助 QImage。带有 RasterOp 标记的混合模式不支持包含 alpha 分量的笔刷和画笔。此外,开启 AntiAliasing 渲染提示将有效地禁用 RasterOp 模式。

../../_images/qpainter-compositionmode1.png ../../_images/qpainter-compositionmode2.png

最常见类型是 SourceOver(常被称为 alpha 混合),源像素以这种方式与目标像素混合,即源像素的 alpha 分量定义像素的透明度。

一些合成模式需要源或目标图像具有alpha通道才能生效。为了获得最佳性能,推荐使用图像格式 Format_ARGB32_Premultiplied

设置合成模式后,它将对所有绘画运算符、笔刷、画笔、渐变和位图/图像绘制生效。

常量

描述

QPainter.CompositionMode_SourceOver

这是默认模式。使用源像素的 alpha 值在上面的目标像素上混合。

QPainter.CompositionMode_DestinationOver

使用目标像素的 alpha 值在其上混合源像素。此模式是 CompositionMode_SourceOver 的逆模式。

QPainter.CompositionMode_Clear

独立于源,清除(设置为完全透明)目标像素。

QPainter.CompositionMode_Source

输出是源像素。(这意味着是一次基本复制操作,如果源像素是不透明的,则与 SourceOver 相同)。

QPainter.CompositionMode_Destination

输出是目标像素。这意味着混合没有效果。这种模式是CompositionMode_Source的逆。

QPainter.CompositionMode_SourceIn

输出是源色,其alpha值被目标alpha值降低。

QPainter.CompositionMode_DestinationIn

输出是目标像素,其alpha值被源alpha值降低。这种模式是CompositionMode_SourceIn的逆。

QPainter.CompositionMode_SourceOut

输出是源色,其alpha值被目标alpha值的反向降低。

QPainter.CompositionMode_DestinationOut

输出是目标像素,其alpha值被源alpha值的反向降低。这种模式是CompositionMode_SourceOut的逆。

QPainter.CompositionMode_SourceAtop

源像素与目标像素混合,源像素的alpha值由目标像素的alpha值降低。

QPainter.CompositionMode_DestinationAtop

目标像素与源像素混合,目标像素的alpha值由源像素的alpha值降低。这种模式是CompositionMode_SourceAtop的逆。

QPainter.CompositionMode_Xor

源alpha值与目标alpha值的反向降低后与目标合并,其alpha值由源alpha值的反向降低。CompositionMode_Xor与位运算Xor不同。

QPainter.CompositionMode_Plus

源和目标像素的alpha和颜色相加。

QPainter.CompositionMode_Multiply

输出是源颜色乘以目标颜色。用白色乘以颜色不改变颜色,而用黑色乘以颜色则产生黑色。

QPainter.CompositionMode_Screen

源颜色和目标颜色反转后相乘。用白色筛分产生白色,而用黑色筛分不改变颜色。

QPainter.CompositionMode_Overlay

根据目标颜色乘以或筛分颜色。目标颜色与源颜色混合以反映目标颜色的明暗。

QPainter.CompositionMode_Darken

选择源和目标颜色中较暗的颜色。

QPainter.CompositionMode_Lighten

选择源和目标颜色中较亮的颜色。

QPainter.CompositionMode_ColorDodge

提高目标颜色以反映源颜色。黑色源颜色不改变目标颜色。

QPainter.CompositionMode_ColorBurn

降低目标颜色以反映源颜色。白色源颜色不改变目标颜色。

QPainter.CompositionMode_HardLight

根据源颜色乘以或筛分颜色。亮的源颜色会变亮目标颜色,而暗的源颜色会使目标颜色变暗。

QPainter.CompositionMode_SoftLight

根据源颜色变暗或变亮颜色。类似于CompositionMode_HardLight。

QPainter.CompositionMode_Difference

从较亮的颜色中减去较暗的颜色。用白色绘制反转目标颜色,而用黑色绘制不改变目标颜色。

QPainter.CompositionMode_EXCLUSION

类似于CompositionMode_Difference,但有较低的反差。用白色绘制反转目标颜色,而用黑色绘制不改变目标颜色。

QPainter.RasterOp_SOURCE_OUT

对源和目标像素进行位或操作(src OR dst)。

QPainter.RasterOp_SourceAndDestination

对源和目标像素进行位与操作(src AND dst)。

QPainter.RasterOp_SourceXorDestination

对源和目标像素进行位异或操作(src XOR dst)。

QPainter.RasterOp_NotSourceAndNotDestination

对源和目标像素进行位或非操作((NOT src) AND (NOT dst))。

QPainter.RasterOp_NotSourceOrNotDestination

对源像素和目标像素进行按位NAND操作(NOT src OR NOT dst)。

QPainter.RasterOp_NotSourceXorDestination

进行按位操作,先将源像素取反然后与目标像素进行异或操作(NOT src XOR dst)。

QPainter.RasterOp_NotSource

进行按位操作,只对源像素取反(NOT src)。

QPainter.RasterOp_NotSourceAndDestination

进行按位操作,先将源像素取反然后与目标像素进行与操作(NOT src AND dst)。

QPainter.RasterOp_SourceAndNotDestination

进行按位操作,将源像素与取反后的目标像素进行与操作(src AND NOT dst)。

QPainter.RasterOp_NotSourceOrDestination

进行按位操作,先将源像素取反然后与目标像素进行或操作(NOT src OR dst)。

QPainter.RasterOp_ClearDestination

独立于源,将目标像素清除(设置为0)。

QPainter.RasterOp_SetDestination

独立于源,将目标像素设置为1。

QPainter.RasterOp_NotDestination

进行按位操作,只对目标像素取反(NOT dst)。

QPainter.RasterOp_SourceOrNotDestination

进行按位操作,将源像素与取反后的目标像素进行或操作(src OR NOT dst)。

另请参阅

compositionMode() setCompositionMode() Composition Modes Image Composition Example

__init__(arg__1)#
参数:

arg__1QPaintDevice

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

构造一个画家,立即开始绘制 paint device

此构造函数对于生命周期较短的画家很方便,例如在 QWidget::paintEvent() 中,应仅使用一次。该构造函数为您调用 begin() ,而 QPainter 析构函数会自动调用 end() .

这是使用 begin()end() 的示例

def paintEvent(self, arg__0):

    p = QPainter()
    p.begin(self)
    p.drawLine(drawingCode) # drawing code
    p.end()

使用此构造函数的相同示例

def paintEvent(self, arg__0):

    p = QPainter(self)
    p.drawLine(drawingCode) # drawing code

由于构造函数无法提供初始化画家失败时的反馈,因此您应使用 begin()end() 在外部设备上绘制,例如打印机。

另请参阅

begin() end()

__init__()

构造一个画家。

另请参阅

begin() end()

__enter__()#
返回类型:

QPainter

__exit__(arg__1, arg__2, arg__3)#
参数:
  • arg__1 - 对象

  • arg__2 - 对象

  • arg__3 - 对象

background()#
返回类型:

QBrush

返回当前背景画刷。

另请参阅

setBackground() Settings

backgroundMode()#
返回类型:

BGMode

返回当前背景模式。

另请参阅

setBackgroundMode() Settings

begin(arg__1)#
参数:

arg__1QPaintDevice

返回类型:

bool

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

开始在该 paint device 上进行绘制,如果成功则返回 true,否则返回 false

注意,当调用 begin() 时,所有画家设置(如 setPen()setBrush() 等)都会重置为默认值。

可能发生的错误是严重的问题,如下

painter.begin(0) # impossible - paint device cannot be 0
image = QPixmap(0, 0)
painter.begin(image) # impossible - image.isNull() == true
painter.begin(myWidget)
painter2.begin(myWidget) # impossible - only one painter at a time

注意,大多数情况下,你可以使用构造函数之一而不是 begin(),并且 end() 在销毁时会自动执行。

警告

一个画家一次只能画一个绘制设备。

警告

在格式为 QImageFormat_Indexed8QImage 上绘制是不支持的。

另请参阅

end() QPainter()

beginNativePainting()#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

刷新绘图管道,准备用户直接向底层图形上下文发送命令。必须在调用endNativePainting()

注意,只有底层绘图引擎更改的状态会重置到各自的默认状态。我们可以重置的状态可能从版本到版本会有所变化。在OpenGL 2引擎中目前重置的状态如下

  • 合并(混合)功能被禁用

  • 深度、模板和剪裁测试被禁用

  • 活动的纹理单元重置为0

  • 深度掩码、深度函数和清除深度被重置为其默认值

  • 模板掩码、模板操作和模板函数被重置为其默认值

  • 当前颜色被重置为纯白色

例如,如果用户在beginNativePaint()/ endNativePainting()块内更改OpenGL多边形模式,它将不会被endNativePainting()重置为默认状态。以下是一个示例,展示了绘图命令和原始OpenGL命令的混合

painter = QPainter(self)
painter.fillRect(0, 0, 128, 128, Qt.green)
painter.beginNativePainting()
glEnable(GL_SCISSOR_TEST)
glScissor(0, 0, 64, 64)
glClearColor(1, 0, 0, 1)
glClear(GL_COLOR_BUFFER_BIT)
glDisable(GL_SCISSOR_TEST)
painter.endNativePainting()

另请参阅

endNativePainting()

boundingRect(rect, flags, text)#
参数:
  • rectQRect

  • flags – int

  • text – str

返回类型:

QRect

这是一个重载函数。

返回文本在给定代码块中按照指定的标志和当前设置的font()绘制时的边界矩形。

boundingRect(rect, text, o = QTextOption())
参数:
返回类型:

QRectF

这是一个重载函数。

与使用Qt::AlignmentFlag和Qt::TextFlag的按位或来指定标志不同,这个重载函数接受一个代码"option"参数。QTextOption类提供了一组描述通用富文本属性的描述。

另请参阅

QTextOption

boundingRect(rect, flags, text)
参数:
  • rectQRectF

  • flags – int

  • text – str

返回类型:

QRectF

返回文本在给定rectangle中绘制时的边界矩形,使用当前设置的字体和标志进行绘制;即该函数告诉您,当给定相同的参数时,drawText()函数将绘制在何处。

如果使用指定的flags在给定的rectangle内无法容纳text,则该函数返回所需的矩形。

flags参数是以下标志的位或操作

  • Qt::AlignLeft

  • Qt::AlignRight

  • Qt::AlignHCenter

  • Qt::AlignTop

  • Qt::AlignBottom

  • Qt::AlignVCenter

  • Qt::AlignCenter

  • Qt::TextSingleLine

  • Qt::TextExpandTabs

  • Qt::TextShowMnemonic

  • Qt::TextWordWrap

  • Qt::TextIncludeTrailingSpaces

如果设置了多个水平或垂直对齐标志,则结果对齐是未定义的。

另请参阅

drawText() TextFlag

boundingRect(x, y, w, h, flags, text)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • flags – int

  • text – str

返回类型:

QRect

这是一个重载函数。

返回给定文本的边界矩形,当它绘制在从点(xy)开始的矩形内,宽度为w和高度为h时。

brush()#
返回类型:

QBrush

返回绘图器的当前画刷。

另请参阅

setBrush() Settings

brushOrigin()#
返回类型:

QPoint

返回当前设置的画刷原点。

另请参阅

setBrushOrigin() Settings

clipBoundingRect()#
返回类型:

QRectF

如果存在裁剪区域,则返回当前裁剪区域的外接矩形;否则返回一个空矩形。请注意,裁剪区域使用逻辑坐标来表示。

外接矩形不一定是最紧的。

clipPath()#
返回类型:

QPainterPath

返回当前裁剪路径的逻辑坐标。

警告

QPainter 并不显式地存储组合裁剪,因为这由底层的 QPaintEngine 处理,因此路径在需要时才被重建,并转换为当前的逻辑坐标系。这可能会是一个昂贵的操作。

clipRegion()#
返回类型:

QRegion

返回当前设置的裁剪区域。请注意,裁剪区域使用逻辑坐标表示。

警告

QPainter 并不显式地存储组合裁剪,因为这由底层的 QPaintEngine 处理,因此路径在需要时才被重建,并转换为当前的逻辑坐标系。这可能会是一个昂贵的操作。

combinedTransform()#
返回类型:

QTransform

返回结合当前窗口/视口和世界变换的转换矩阵。

compositionMode()#
返回类型:

合成模式

返回当前合成模式。

device()#
返回类型:

QPaintDevice

获取当前绘制器正在绘制的画笔设备,如果绘制器未激活返回 None

另请参阅

isActive()

deviceTransform()#
返回类型:

QTransform

返回从逻辑坐标到平台相关绘图设备的设备坐标的矩阵。

当在平台相关的句柄(Qt::HANDLE)上使用平台绘图指令且平台不做原生转换时,该函数是必需要的。

可以查询 PaintEngineFeature 枚举以确定平台是否执行转换。

drawArc(arg__1, a, alen)#
参数:
  • **arg__1** – QRect

  • **a** – int

  • **alen** – int

这是一个重载函数。

根据给定的矩形、起始角度和跨角度绘制弧线。

drawArc(rect, a, alen)
参数:
  • rectQRectF

  • **a** – int

  • **alen** – int

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

根据给定的矩形、起始角度和跨角度绘制弧线。

起始角度和跨角度必须以 1/16 度指定,即一整圈等于 5760(16 * 360)。角度的正值表示逆时针,负值表示顺时针。零度在3点钟位置。

qpainter-arc1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawArc(rectangle, startAngle, spanAngle)
drawArc(x, y, w, h, a, alen)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • **a** – int

  • **alen** – int

这是一个重载函数。

以指定宽度和高度从(xy)位置开始的矩形,绘制起始角度和跨角度定义的弧线。

drawChord(x, y, w, h, a, alen)#
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • **a** – int

  • **alen** – int

这是一个重载函数。

使用指定的代码 DrawChord(x, y)处的矩形,宽和高度,以及给定的起始角度和跨度角度来绘制一道和弦。

drawChord(arg__1, a, alen)
参数:
  • **arg__1** – QRect

  • **a** – int

  • **alen** – int

这是一个重载函数。

使用给定的矩形,起始角度和跨度角度绘制一个和弦。

drawChord(rect, a, alen)
参数:
  • rectQRectF

  • **a** – int

  • **alen** – int

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

使用给定的矩形,起始角度和跨度角度绘制一个和弦。这个弦将填充当前的画笔色。

起始角度和跨度角度必须以16分度之一的度数指定,即一整圈等于5760度(16 * 360)。角度的正值表示逆时针方向,而负值表示顺时针方向。零度在3点钟位置。

qpainter-chord1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawChord(rect, startAngle, spanAngle)
drawConvexPolygon(arg__1)#
参数:

arg__1 —— .QPoint点列表

drawConvexPolygon(arg__1)
参数:

arg__1 —— .QPointF点列表

drawConvexPolygon(polygon)
参数:

polygon —— QPolygon

这是一个重载函数。

使用当前画笔和画刷绘制由 polygon 定义的凸多边形。

drawConvexPolygon(polygon)
参数:

polygon —— QPolygonF

这是一个重载函数。

使用当前画笔和画刷绘制由 polygon 定义的凸多边形。

drawEllipse(center, rx, ry)#
参数:
  • centerQPoint

  • rx – int

  • ry – int

这是一个重载函数。

以位置 center,半径 rxry 绘制椭圆。

drawEllipse(center, rx, ry)
参数:
  • centerQPointF

  • rx – float

  • ry – float

这是一个重载函数。

以位置 center,半径 rxry 绘制椭圆。

drawEllipse(r)
参数:

rQRect

这是一个重载函数。

根据给定的 rectangle 绘制椭圆。

drawEllipse(r)
参数:

rQRectF

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

根据给定的 rectangle 绘制椭圆。

填充椭圆的大小是 rectangle.size()。线框椭圆的大小是 rectangle.size() 加上笔宽。

qpainter-ellipse1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
painter = QPainter(self)
painter.drawEllipse(rectangle)

另请参阅

drawPie() 坐标系

drawEllipse(x, y, w, h)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

这是一个重载函数。

绘制一个以点 (x, y) 开始,具有给定宽度和高度 widthheight 的矩形定义的椭圆。

drawGlyphRun(position, glyphRun)#
参数:

position 位置绘制由 glyphs 表示的符号。该 position 提供了符号字符串的基线边缘。符号将根据 glyphs 上选择的字体以及 glyphs 中的偏移量检索。

drawImage(p, image)#
参数:

这是一个重载函数。

在指定的point位置绘制给定的image

drawImage(p, image, sr[, flags=Qt.AutoColor])
参数:

这是一个重载函数。

以给定的point原点绘制给定image的矩形部分source

drawImage(p, image)
参数:

这是一个重载函数。

在指定的point位置绘制给定的image

drawImage(p, image, sr[, flags=Qt.AutoColor])
参数:

这是一个重载函数。

以给定的point原点绘制给定image的矩形部分source

drawImage(r, image)
参数:

这是一个重载函数。

将给定的image绘制到给定的rectangle中。

注意

如果图像和矩形大小不同,图像将被缩放以适合矩形。

drawImage(targetRect, image, sourceRect[, flags=Qt.AutoColor])
参数:

这是一个重载函数。

将给定图像的矩形部分source绘制到绘图设备中的目标矩形target中。

注意

如果图像和矩形大小不同,图像将被缩放以适合矩形。

drawImage(r, image)
参数:

这是一个重载函数。

将给定的image绘制到给定的rectangle中。

注意

如果图像和矩形大小不同,图像将被缩放以适合矩形。

drawImage(targetRect, image, sourceRect[, flags=Qt.AutoColor])
参数:

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

将给定图像的矩形部分source绘制到绘图设备中的目标矩形target中。

注意

如果图像和矩形大小不同,图像将被缩放以适合矩形。

注意

有关如何受QImage::devicePixelRatio()影响的详细信息,请参阅Drawing High Resolution Versions of Pixmaps and Images

如果需要修改图像以适合较低分辨率的输出(例如,从32位转换为8位),请使用flags来指定您希望如何执行此操作。

target = QRectF(10.0, 20.0, 80.0, 60.0)
source = QRectF(0.0, 0.0, 70.0, 40.0)
image = QImage(":/images/myImage.png")
painter = QPainter(self)
painter.drawImage(target, image, source)

另请参阅

drawPixmap() devicePixelRatio()

drawImage(x, y, image[, sx=0[, sy=0[, sw=-1[, sh=-1[, flags=Qt.AutoColor]]]]])
参数:

这是一个重载函数。

在('x', 'y')处绘制图像,通过将image的一部分复制到绘图设备中。

('x', 'y')指定要绘制到绘图设备中的左上角点。('sx', 'sy')指定要绘制图像中的左上角点。默认为(0, 0)。

('sw', 'sh')指定要绘制的图像大小。默认值(0, 0)(和负值)意味着画到图像的右下角。

drawLine(x1, y1, x2, y2)#
参数:
  • x1 – int

  • y1 – int

  • x2 – int

  • y2 – int

这是一个重载函数。

从('x1', 'y1')绘制到('x2', 'y2')直线。

drawLine(p1, p2)
参数:

这是一个重载函数。

p1 绘制到 p2 的线条。

drawLine(line)
参数:

lineQLineF

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

使用 line 定义的线条。

qpainter-line1

line = QLineF(10.0, 80.0, 90.0, 20.0)
painter = QPainter(self)
painter.drawLine(line)
drawLine(line)
参数:

lineQLine

这是一个重载函数。

使用 line 定义的线条。

drawLine(p1, p2)
参数:

这是一个重载函数。

p1 绘制到 p2 的线条。

drawLines(lines, lineCount)#
参数:
  • linesQLineF

  • lineCount – int

使用当前画笔绘制数组 lines 中前 lineCount 条线。

另请参阅

drawLine() drawPolyline()

drawLines(lines)
参数:

lines – .QLine 列表

这是一个重载函数。

使用当前画笔和填充刷绘制由列表 lines 定义的线条集。

drawLines(lines)
参数:

lines – .QLineF 列表

这是一个重载函数。

使用当前画笔和填充刷绘制由列表 lines 定义的线条集。

drawLines(pointPairs)
参数:

pointPairs – .QPoint 列表

这是一个重载函数。

使用当前画笔在每个点对上绘制线条,该点对位于向量 pointPairs 中。

drawLines(pointPairs)
参数:

pointPairs – .QPointF 列表

这是一个重载函数。

在每个点对上绘制线条,该点对位于向量 pointPairs 中。如果数组中点的数量是奇数,则忽略最后一个点。

drawPath(path)#
参数:

路径QPainterPath

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

使用当前笔划轮廓和当前画笔填充来绘制给定的path

qpainter-path1

path = QPainterPath()
path.moveTo(20, 80)
path.lineTo(20, 30)
path.cubicTo(80, 0, 50, 50, 80, 80)
painter = QPainter(self)
painter.drawPath(path)

另请参阅

画笔路径 示例,向量变形 示例

drawPicture(p, picture)#
参数:

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

在给定的point位置重新播放给定的picture

QPicture类是一个绘画设备,用于记录和回放QPainter命令。图片将绘图命令序列化到一个平台无关的IO设备。可以在小部件或小图上绘制的任何内容也可以存储在图片中。

当用点point = QPointF(0, 0)调用时,此函数与play()完全相同。

注意

该函数会保持绘图器的状态。

picture = QPicture()
point = QPointF(10.0, 20.0)
picture.load("drawing.pic")
painter = QPainter(self)
painter.drawPicture(0, 0, picture)

另请参阅

播放()

drawPicture(x, y, picture)
参数:

这是一个重载函数。

在点(xy)处绘制给定的picture

drawPicture(p, picture)
参数:

这是一个重载函数。

在给定的point位置重新播放给定的picture

drawPie(arg__1, a, alen)#
参数:
  • **arg__1** – QRect

  • **a** – int

  • **alen** – int

这是一个重载函数。

根据给定的rectanglestartAnglespanAngle绘制一个饼图。

drawPie(rect, a, alen)
参数:
  • rectQRectF

  • **a** – int

  • **alen** – int

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

根据给定的rectanglestartAnglespanAngle绘制一个饼图。

这个饼图用当前的 brush()

起始角度和跨度角度必须以16分度之一的度数指定,即一整圈等于5760度(16 * 360)。角度的正值表示逆时针方向,而负值表示顺时针方向。零度在3点钟位置。

qpainter-pie1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawPie(rectangle, startAngle, spanAngle)
drawPie(x, y, w, h, a, alen)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • **a** – int

  • **alen** – int

这是一个重载函数。

绘制由矩形定义的饼图,该矩形从 (x, y) 开始,具有指定的 widthheight,以及给定的 startAnglespanAngle

drawPixmap(x, y, w, h, pm)#
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • pmQPixmap

这是一个重载函数。

pixmap 绘制到位置为 (x, y) 的矩形内,其宽度和高度分别为给定的 widthheight

drawPixmap(x, y, w, h, pm, sx, sy, sw, sh)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • pmQPixmap

  • sx – int

  • sy – int

  • sw – int

  • sh – int

这是一个重载函数。

从给定的 pixmap 中绘制原点为 (sx, sy), 宽度为 sw 和高度为 sh 的矩形部分,放置在点 (x, y),宽度为 w 和高度为 h。如果 sw 或 sh 为零,则使用 pixmap 的宽度和高度,并根据偏移量 sx/sy 进行调整;

drawPixmap(x, y, pm, sx, sy, sw, sh)
参数:
  • x - int

  • y - int

  • pmQPixmap

  • sx – int

  • sy – int

  • sw – int

  • sh – int

这是一个重载函数。

通过将给定 pixmap 的一部分复制到画布设备中来在 (x, y) 处绘制位图。

(x, y) 指定了在画布设备中要绘制到顶左点的位置。(sx, sy) 指定了 pixmap 中要绘制的顶左点的位置。默认为 (0, 0)。

(sw, sh) 指定了要绘制的位图的尺寸。默认值 (0, 0)(以及负值)表示延伸到位图的右下角。

drawPixmap(x, y, pm)
参数:

这是一个重载函数。

在位置 (x, y) 绘制给定的 pixmap}

drawPixmap(targetRect, pixmap, sourceRect)
参数:

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

在画布设备给定的 target 中绘制给定 pixmap 的矩形部分 source

注意

如果位图和矩形的大小不一致,则会将位图缩放以适应矩形。

注意

有关此方式如何受 devicePixelRatio() 的影响,请参阅 Drawing High Resolution Versions of Pixmaps and Images

target = QRectF(10.0, 20.0, 80.0, 60.0)
source = QRectF(0.0, 0.0, 70.0, 40.0)
pixmap = QPixmap(":myPixmap.png")
painter = QPainter(self)
painter.drawPixmap(target, pixmap, source)

如果 pixmap 是一个 QBitmap,则使用画笔的颜色绘制“设置”的位。如果 backgroundMode 是 Qt::OpaqueMode,则用背景画刷的颜色绘制“未设置”的位;如果 backgroundMode 是 Qt::TransparentMode,则“未设置”的位为透明。不支持使用渐变或纹理颜色绘制位图。

另请参阅

drawImage() devicePixelRatio()

drawPixmap(r, pm)
参数:

这是一个重载函数。

将给定的 pixmap 绘制到给定的 rectangle 中。

注意

如果位图和矩形的大小不一致,则会将位图缩放以适应矩形。

drawPixmap(p, pm, sr)
参数:

这是一个重载函数。

以给定的点为原点绘制给定 pixmap 的矩形源 source

drawPixmap(p, pm)
参数:

这是一个重载函数。

以给定点为原点绘制给定的 pixmap

drawPixmap(p, pm, sr)
参数:

这是一个重载函数。

以给定的点为原点绘制给定 pixmap 的矩形源 source

drawPixmap(p, pm)
参数:

这是一个重载函数。

以给定点为原点绘制给定的 pixmap

drawPixmap(targetRect, pixmap, sourceRect)
参数:

这是一个重载函数。

在画布设备给定的 target 中绘制给定 pixmap 的矩形部分 source

注意

如果位图和矩形的大小不一致,则会将位图缩放以适应矩形。

drawPixmapFragments(fragments, fragmentCount, pixmap[, hints=QPainter.PixmapFragmentHints()])#
参数:

此函数用于在多个位置以不同的缩放、旋转和透明度绘制 pixmappixmap 的子矩形。 fragments 是一个包含 fragmentCount 个元素的数组,指定了绘制每个 pixmap 片段的参数。可以使用 hints 参数传递绘图提示。

由于后端可以优化状态变化,此函数可能比多次调用 drawPixmap() 更快。

另请参阅

PixmapFragment PixmapFragmentHint

drawPoint(p)#
参数:

pQPoint

这是一个重载函数。

使用当前画笔的颜色在给定的 position 位置绘制一个点。

drawPoint(pt)
参数:

ptQPointF

使用当前画笔的颜色在给定的 position 位置绘制一个点。

另请参阅

坐标系

drawPoint(x, y)
参数:
  • x - int

  • y - int

这是一个重载函数。

在位置(xy)处绘制单个点。

drawPoints(points)#
参数:

pointsQPolygonF

这是一个重载函数。

绘制向量中的点 points

drawPoints(points)
参数:

pointsQPolygon

这是一个重载函数。

绘制向量中的点 points

drawPoints(points, pointCount)
参数:
  • pointsQPointF

  • pointCount – int

使用当前笔的颜色绘制数组 points 中前 pointCount 个点。

另请参阅

坐标系

drawPoints(arg__1)
参数:

arg__1 —— .QPointF点列表

drawPoints(arg__1)
参数:

arg__1 —— .QPoint点列表

drawPointsNp(x, y)#
参数:
  • xPyArrayObject

  • yPyArrayObject

绘制由分别代表 x, y 值的两个一维、等大小的 numpy 数组指定的点。

drawPolygon(arg__1, arg__2)#
参数:
  • arg__1 —— .QPoint点列表

  • arg__2FillRule

drawPolygon(arg__1, arg__2)
参数:
  • arg__1 —— .QPointF点列表

  • arg__2FillRule

drawPolygon(polygon[, fillRule=Qt.OddEvenFill])
参数:

这是一个重载函数。

使用填充规则 fillRule 绘制由给定 points 定义的多边形。

drawPolygon(polygon[, fillRule=Qt.OddEvenFill])
参数:

这是一个重载函数。

使用填充规则 fillRule 绘制由给定 points 定义的多边形。

drawPolyline(arg__1)#
参数:

arg__1 —— .QPoint点列表

drawPolyline(arg__1)
参数:

arg__1 —— .QPointF点列表

drawPolyline(polygon)
参数:

polygon —— QPolygon

这是一个重载函数。

使用当前画笔绘制由给定的 points 定义的折线。

drawPolyline(polyline)
参数:

polylineQPolygonF

这是一个重载函数。

使用当前画笔绘制由给定的 points 定义的折线。

drawRect(rect)#
参数:

rectQRect

这是一个重载函数。

使用当前画笔和画刷绘制当前 rectangle

drawRect(rect)
参数:

rectQRectF

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

使用当前画笔和画刷绘制当前 rectangle

填充矩形的大小为 rectangle.size()。绘制线框矩形的大小为 rectangle.size() 加上画笔宽度。

qpainter-rectangle1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
painter = QPainter(self)
painter.drawRect(rectangle)
drawRect(x1, y1, w, h)
参数:
  • x1 – int

  • y1 – int

  • w - int

  • h - int

这是一个重载函数。

绘制一个以左上角为 (x, y)、给定 widthheight 的矩形。

drawRects(rects, rectCount)#
参数:
  • rectsQRectF

  • rectCount – int

使用当前画笔和画刷绘制给定的前 rectCountrectangles

另请参阅

drawRect()

drawRects(rectangles)
参数:

rectangles – .list of QRect

这是一个重载函数。

使用当前画笔和画刷绘制给定的 rectangles

drawRects(rectangles)
参数:

rectangles – .list of QRectF

这是一个重载函数。

使用当前画笔和画刷绘制给定的 rectangles

drawRoundedRect(rect, xRadius, yRadius[, mode=Qt.AbsoluteSize])#
参数:
  • rectQRectF

  • xRadius – float

  • yRadius – float

  • 模式SizeMode

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

绘制具有圆角的给定矩形 rect

xRadiusyRadius 参数指定定义圆角矩形的椭圆的半径。当 mode 为 Qt::RelativeSize 时,xRadiusyRadius 分别以百分比指定为矩形宽度的一半和高度的一半,应在 0.0 到 100.0 的范围内。

填充矩形的尺寸为 rect.size()。描边矩形的尺寸为 rect.size() 加上笔宽。

qpainter-roundrect1

rectangle = QRectF(10.0, 20.0, 80.0, 60.0)
painter = QPainter(self)
painter.drawRoundedRect(rectangle, 20.0, 15.0)

另请参阅

drawRect() QPen

drawRoundedRect(rect, xRadius, yRadius[, mode=Qt.AbsoluteSize])
参数:
  • rectQRect

  • xRadius – float

  • yRadius – float

  • 模式SizeMode

这是一个重载函数。

绘制具有圆角的给定矩形 rect

drawRoundedRect(x, y, w, h, xRadius, yRadius[, mode=Qt.AbsoluteSize])
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • xRadius – float

  • yRadius – float

  • 模式SizeMode

这是一个重载函数。

绘制具有圆角的给定矩形 xywh

drawStaticText(topLeftPosition, staticText)#
参数:

这是一个重载函数。

topLeftPosition 处绘制 staticText

注意

使用 y 位置作为字体顶部。

drawStaticText(topLeftPosition, staticText)
参数:

在给定的 topLeftPosition 处绘制给定的 staticText

文本将通过在画家上设置的字体和转换应用进行绘制。如果画家上的字体和/或转换与初始化QStaticText布局时使用的不同,那么布局将需要重新计算。使用prepare()来用将用于后续绘制的字体和转换初始化staticText

如果topLeftPosition与初始化staticText时或它上次绘制时的位置不同,则在将文本转换到新位置的细微开销时会有所不同。

注意

如果画家的变换不是仿射的,则将使用drawText()的常规调用绘制staticText,从而失去任何潜在的性能改进。

注意

使用 y 位置作为字体顶部。

另请参阅

QStaticText

drawStaticText(left, top, staticText)
参数:
  • left – int

  • top – int

  • 静态文本QStaticText

这是一个重载函数。

在坐标lefttop处绘制staticText

注意

使用 y 位置作为字体顶部。

drawText(p, s)#
参数:

这是一个重载函数。

以当前定义的文本方向,从指定的position处开始绘制给定的text

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

y位置用作字体的基线。

另请参阅

setFont() setPen()

drawText(p, s)
参数:

以当前定义的文本方向,从指定的position处开始绘制给定的text

此函数不处理换行符(\n),因为它不能将文本分成多行,并且不能显示换行符。如果想要使用换行符绘制多行文本或者想要文本自动换行,请使用接收矩形作为参数的QPainter::drawText()的重载版本。

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

y位置用作字体的基线。

另请参阅

setFont() setPen()

drawText(r, flags, text)
参数:
  • rQRect

  • flags – int

  • text – str

返回类型:

QRect

该函数返回整个文本的包围矩形。

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

这是一个重载函数。

根据指定的flags,在提供的rectangle内绘制给定的text

如果非null,则将boundingRect设置为目标边界矩形,以便包围整个文本。例如,在下图中,虚线表示函数计算出的boundingRect,虚线表示rectangle

qpainter-text-bounds1

painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0, 0, 100, 50)
boundingRect = painter.drawText(rectangle, 0, "Hello")
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()))

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

rectangle的y坐标用作字体顶部。

另请参阅

setFont() setPen()

drawText(r, text[, o=QTextOption()])
参数:

这是一个重载函数。

使用option来控制其定位、方向和朝向的方式,在指定的rectangle中绘制给定的文本。在option中给出的选项会覆盖在QPainter对象上设置的选项。

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

rectangle的y坐标用作字体顶部。

另请参阅

setFont() setPen()

drawText(r, flags, text)
参数:
  • rQRectF

  • flags – int

  • text – str

返回类型:

QRectF

该函数返回整个文本的包围矩形。

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

这是一个重载函数。

在提供的rectangle内绘制给定的text。矩形及其对齐标志定义了文本的锚点。

qpainter-text1

painter = QPainter(self)
painter.drawText(rect, Qt.AlignCenter, tr("Qt\nProject"))

如果非null,则将boundingRect设置为包围整个文本的目标边界矩形。例如,在下图中,虚线表示函数计算出的boundingRect,虚线表示rectangle

qpainter-text-bounds2

painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0, 0, 100, 50)
boundingRect = painter.drawText(rectangle, 0, "Hello")
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()))

flags参数是以下标志的位或操作

  • Qt::AlignLeft

  • Qt::AlignRight

  • Qt::AlignHCenter

  • Qt::AlignJustify

  • Qt::AlignTop

  • Qt::AlignBottom

  • Qt::AlignVCenter

  • Qt::AlignCenter

  • Qt::TextDontClip

  • Qt::TextSingleLine

  • Qt::TextExpandTabs

  • Qt::TextShowMnemonic

  • Qt::TextWordWrap

  • Qt::TextIncludeTrailingSpaces

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

rectangle的y坐标用作字体顶部。

drawText(x, y, s)
参数:
  • x - int

  • y - int

  • s – str

这是一个重载函数。

使用画家当前定义的文本方向,在位置(xy)处绘制给定的text

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

y位置用作字体的基线。

另请参阅

setFont() setPen()

drawText(x, y, w, h, flags, text)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • flags – int

  • text – str

该函数返回整个文本的包围矩形。

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

这是一个重载函数。

在原点为(xy),宽度为width和高度为height的矩形内绘制给定的text

boundingRect(如果非null)被设置为包围整个文本的边界矩形。例如,在以下图像中,虚线表示该函数计算的boundingRect,虚线线表示由xywidthheight定义的矩形。

qpainter-text-bounds1

painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0, 0, 100, 50)
boundingRect = painter.drawText(rectangle, 0, "Hello")
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()))

flags参数是以下标志的位或操作

  • Qt::AlignLeft

  • Qt::AlignRight

  • Qt::AlignHCenter

  • Qt::AlignJustify

  • Qt::AlignTop

  • Qt::AlignBottom

  • Qt::AlignVCenter

  • Qt::AlignCenter

  • Qt::TextSingleLine

  • Qt::TextExpandTabs

  • Qt::TextShowMnemonic

  • Qt::TextWordWrap

默认情况下,QPainter以抗锯齿方式绘制文本。

注意

使用 y 位置作为字体顶部。

另请参阅

setFont() setPen()

drawTextItem(p, ti)#
参数:
drawTextItem(x, y, ti)
参数:
drawTextItem(p, ti)
参数:
drawTiledPixmap(arg__1, arg__2[, pos=QPoint()])#
参数:

这是一个重载函数。

在给定位置处,使用其原点绘制给定矩形的平铺pixmap

drawTiledPixmap(rect, pm[, offset=QPointF()])
参数:

在给定位置处,使用其原点绘制给定矩形的平铺pixmap

调用drawTiledPixmap()与多次调用drawPixmap()来填充(平铺)使用pixmap的区域相似,但根据底层窗口系统,效率可能更高。

drawTiledPixmap()将在高dpi显示器(设备像素比 > 1)上产生与标准dpi显示相同的视觉平铺图案。将pixmap上的devicePixelRatio设置为控制瓷砖大小。例如,将其设置为2将将瓷砖宽度高度减半(在1x和2x显示器上),并在2x显示器上产生高分辨率输出。

位置偏移始终位于画家坐标系中,与显示设备的devicePixelRatio无关。

另请参阅

drawPixmap()

drawTiledPixmap(x, y, w, h, arg__5[, sx=0[, sy=0]])
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • arg__5QPixmap

  • sx – int

  • sy – int

这是一个重载函数。

在指定的矩形中绘制平铺的 pixmap

(x, y) 指定要绘制到画布中的左上角点;给定的 widthheight。 (sx, sy) 指定要绘制的 pixmap 中的左上角点;默认为 (0, 0)。

end()#
返回类型:

bool

结束绘画。在绘画过程中使用的任何资源都将被释放。通常不需要调用此方法,因为析构函数会调用它。

如果画家不再活跃,则返回 true;否则返回 false

另请参阅

begin() isActive()

endNativePainting()#

在手动发出本地绘画命令后恢复画家。允许画家在调用其他画家命令之前恢复它所依赖的任何本地状态。

另请参阅

beginNativePainting()

eraseRect(arg__1)#
参数:

**arg__1** – QRect

这是一个重载函数。

擦除给定 rectangle 内的区域。

eraseRect(arg__1)
参数:

arg__1QRectF

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

擦除给定 rectangle 内的区域。等同于调用

fillRect(rectangle, background())

另请参阅

fillRect()

eraseRect(x, y, w, h)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

这是一个重载函数。

擦除以 (x, y) 为起点,具有给定 widthheight 的矩形的内部区域。

fillPath(path, brush)#
参数:

使用指定的画笔填充给定的路径。不绘制轮廓。

或者,您可以使用QColor代替QBrush;使用QColor参数的QBrush构造函数将自动创建一个纯色图案画笔。

另请参阅

drawPath()

fillRect(arg__1, color)#
参数:

这是一个重载函数。

使用指定的颜色填充给定的矩形

fillRect(x, y, w, h, color)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • colorQColor

这是一个重载函数。

从 (x, y) 开始绘制指定宽度和高度的矩形,并使用给定的颜色填充。

fillRect(x, y, w, h, arg__5)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • arg__5QBrush

这是一个重载函数。

从 (x, y) 开始绘制指定宽度和高度的矩形,并使用给定的画笔填充。

fillRect(x, y, w, h, c)
参数:

这是一个重载函数。

从 (x, y) 开始绘制指定宽度和高度的矩形,并使用给定的颜色填充。

fillRect(x, y, w, h, style)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • styleBrushStyle

这是一个重载函数。

使用指定的画笔样式填充从(x, y)开始,具有给定宽度高度的矩形。

fillRect(x, y, w, h, preset)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

  • presetPreset

这是一个重载函数。

使用给定的渐变预设填充从(x, y)开始,具有给定宽度高度的矩形。

fillRect(r, c)
参数:

这是一个重载函数。

使用指定的颜色填充给定的矩形

fillRect(r, style)
参数:

这是一个重载函数。

使用指定的画笔样式填充给定的矩形

fillRect(r, preset)
参数:

这是一个重载函数。

使用指定的渐变预设填充给定的矩形

fillRect(arg__1, color)
参数:

这是一个重载函数。

使用指定的颜色填充给定的矩形

fillRect(arg__1, arg__2)
参数:

使用指定的画笔填充给定的矩形

或者,您可以使用QColor代替QBrush;使用QColor参数的QBrush构造函数将自动创建一个纯色图案画笔。

另请参阅

drawRect()

fillRect(r, c)
参数:

这是一个重载函数。

使用指定的颜色填充给定的矩形

fillRect(r, style)
参数:

这是一个重载函数。

使用指定的画笔样式填充给定的矩形

fillRect(r, preset)
参数:

这是一个重载函数。

使用指定的渐变预设填充给定的矩形

fillRect(arg__1, arg__2)
参数:

这是一个重载函数。

使用指定的画笔填充给定的矩形

font()#
返回类型:

QFont

返回用于绘制文本的当前设置字体。

另请参阅

setFont() drawText() Settings

fontInfo()#
返回类型:

QFontInfo

如果绘图器处于活动状态,则返回绘图器的字体信息。否则,返回值未定义。

另请参阅

font() isActive() Settings

fontMetrics()#
返回类型:

QFontMetrics

如果绘图器处于活动状态,则返回绘图器的字体度量。否则,返回值未定义。

另请参阅

font() isActive() Settings

hasClipping()#
返回类型:

bool

如果已设置剪辑,则返回 true;否则返回 false

另请参阅

setClipping() Clipping

isActive()#
返回类型:

bool

如果已调用 begin() 而未调用 end(),则返回 true;否则返回 false

另请参阅

begin() paintingActive()

layoutDirection()#
返回类型:

布局方向

返回绘图器绘制文本时使用的布局方向。

opacity()#
返回类型:

float

返回绘图器的透明度。默认值为1。

另请参阅

setOpacity()

paintEngine()#
返回类型:

QPaintEngine

如果绘图器处于活动状态,则返回绘制器当前正在操作的绘引擎;否则返回0。

另请参阅

isActive()

pen()#
返回类型:

QPen

返回绘图器的当前画笔。

另请参阅

setPen() Settings

renderHints()#
返回类型:

RenderHint的组合。

返回一个标志,指定为此绘图器设置的渲染提示。

另请参阅

setRenderHints() testRenderHint() Rendering Quality

resetTransform()#

重置使用translate()scale()shear()rotate()setWorldTransform()setViewport()setWindow()所做的任何变换。

另请参阅

坐标变换

restore()#

恢复当前绘图器状态(从堆栈中弹出一个保存的状态)。

另请参阅

save()

rotate(a)#
参数:

a – float

将坐标系顺时针旋转。给定的angle参数以度为单位。

另请参阅

setWorldTransform() Coordinate Transformations

save()#

保存当前的画家状态(将状态推入堆栈)。必须使用相应的 restore() ; 函数 end() 将回滚堆栈。

另请参阅

restore()

scale(sx, sy)#
参数:
  • sx – float

  • sy – float

按照(《sx》,《sy》)的比例缩放坐标系。

另请参阅

setWorldTransform() Coordinate Transformations

setBackground(bg)#
参数:

bgQBrush

将画家的背景画笔设置为给定的 brush

背景画笔是在绘制不透明文本、阴影线和位图时填充的画笔。透明背景模式下(默认模式)背景画笔没有效果。

另请参阅

background() setBackgroundMode() Settings

setBackgroundMode(mode)#
参数:

modeBGMode

将画家的背景模式设置为给定的 mode

Qt::TransparentMode(默认模式)绘制阴影线和文本时不设置背景像素。Qt::OpaqueMode将这些空间填充为当前背景色。

注意,为了透明地绘制位图或像素图,必须使用 setMask()

另请参阅

backgroundMode() setBackground() Settings

setBrush(style)#
参数:

styleBrushStyle

这是一个重载函数。

将画家的画笔设置为黑色和指定的 style

setBrush(brush)
参数:

brushQBrush

设置画家的画刷为给定的 brush

画家的画刷定义了形状如何填充。

另请参阅

brush() 设置

setBrushOrigin(x, y)#
参数:
  • x - int

  • y - int

这是一个重载函数。

将画刷的基点设置为点 (x, y)。

setBrushOrigin(arg__1)
参数:

arg__1QPointF

将画刷基点设置为 position

画刷基点指定画家画刷的 (0, 0) 坐标。

请注意,虽然 brushOrigin() 在 Qt 3 中是必要的,以便采用小部件的父级背景,但这种情况不再适用,因为 Qt 4 画家只在您显式告诉它通过将小部件的 autoFillBackground 属性设置为 true 时才绘制背景。

另请参阅

brushOrigin() 设置

setBrushOrigin(arg__1)
参数:

arg__1QPoint

这是一个重载函数。

将画刷的基点设置为给定的 position

setClipPath(path[, op=Qt.ReplaceClip])#
参数:

启用裁剪,并将画家的裁剪路径设置为给定的 path,并使用裁剪 operation

请注意,裁剪路径是在逻辑(画家)坐标中指定的。

另请参阅

clipPath() clipRegion() 裁剪

setClipRect(arg__1[, op=Qt.ReplaceClip])#
参数:

这是一个重载函数。

启用裁剪,使用给定的裁剪 operation 将裁剪区域设置为给定的 rectangle

setClipRect(arg__1[, op=Qt.ReplaceClip])
参数:

启用剪切,并使用给定的剪切操作将剪切区域设置为指定的 rectangle。默认操作是替换当前剪切矩形。

请注意,剪切矩形是使用逻辑(绘图)坐标指定的。

另请参阅

clipRegion() setClipping() Clipping

setClipRect(x, y, w, h[, op=Qt.ReplaceClip])
参数:

启用剪切,并设置剪切区域为以 (x, y) 为起点,具有给定 widthheight 的矩形。

setClipRegion(arg__1[, op=Qt.ReplaceClip])#
参数:

使用指定的剪切操作将剪切区域设置为给定的 region。默认剪切操作是替换当前剪切区域。

请注意,剪切区域是使用逻辑坐标给出的。

另请参阅

clipRegion() setClipRect() Clipping

setClipping(enable)#
参数:

enable – bool

enable 为 true 时启用剪切,当 enable 为 false 时禁用剪切。

另请参阅

hasClipping() Clipping

setCompositionMode(mode)#
参数:

modeCompositionMode

将合成模式设置为给定的 mode

警告

只有在对 QPainter 操作 QImage 的实例时,才完全支持所有合成模式。RaseterOp 模式在 X11 下支持,具体请参见 compositionMode()

另请参阅

compositionMode()

setFont(f)#
参数:

fQFont

将画笔字体设置为给定的 font

此字体用于后续的 drawText() 函数。文字颜色与画笔颜色相同。

如果您设置的字体不可用,Qt 会找到最接近的匹配字体。使用 font() 将返回您使用 setFont() 设置的字体,而 fontInfo() 返回实际使用的字体(可能相同)。

另请参阅

font() drawText() 设置

setLayoutDirection(direction)#
参数:

directionLayoutDirection

当绘制文本时,设置画笔使用的布局方向为指定的 direction

默认为 Qt::LayoutDirectionAuto,它将隐式地从绘制的文本中确定方向。

setOpacity(opacity)#
参数:

opacity – float

设置画笔的不透明度为 opacity。该值应在 0.0 到 1.0 之间,其中 0.0 表示完全透明,1.0 表示完全不透明。

设置在画笔上的不透明度将逐个应用于所有绘图操作。

另请参阅

不透明度()

setPen(style)#
参数:

stylePenStyle

这是一个重载函数。

设置画家的笔为给定的 style,宽度为1,颜色为黑色。

setPen(pen)
参数:

penQPen

将画家的笔设置为给定的 pen

pen 定义了如何绘制线条和轮廓,同时也定义了文本颜色。

另请参阅

pen() Settings

setPen(color)
参数:

colorQColor

这是一个重载函数。

将画家的笔设置为风格 Qt::SolidLine,宽度为1和指定的 color

setRenderHint(hint[, on=true])#
参数:

如果 on 为真,则在画家上设置给定的渲染 hint;否则清除渲染提示。

另请参阅

setRenderHints() renderHints() Rendering Quality

setRenderHints(hints[, on=true])#
参数:

如果 on 为真,则在画家上设置给定的渲染 hints;否则清除渲染提示。

另请参阅

setRenderHint() renderHints() Rendering Quality

setTransform(transform[, combine=false])#
参数:

设置世界变换矩阵。如果 combine 为 true,则将指定的 transform 与当前矩阵合并;否则替换当前矩阵。

setViewTransformEnabled(enable)#
参数:

enable – bool

如果 enable 为 true,则开启视图变换;如果 enable 为 false,则关闭视图变换。

setViewport(viewport)#
参数:

viewportQRect

将画家的视图矩形设置为给定的 rectangle,并开启视图变换。

视图矩形是视图变换的一部分。视图指定设备坐标系。其姐妹 window() 指定逻辑坐标系。

默认视图矩形与设备矩形相同。

setViewport(x, y, w, h)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

这是一个重载函数。

将画家的视图矩形设置为以 (xy) 开始,具有给定 widthheight 的矩形。

setWindow(window)#
参数:

窗口QRect

将画家的窗口设置为给定的 矩形,并启用视图变换。

窗口矩形是视图变换的一部分。窗口指定逻辑坐标系。其姐妹,viewport() ,指定设备坐标系。

默认窗口矩形与设备的矩形相同。

setWindow(x, y, w, h)
参数:
  • x - int

  • y - int

  • w - int

  • h - int

这是一个重载函数。

将画家的窗口设置为以 (x, y) 为起点,并且具有给定的 宽度高度 的矩形。

setWorldMatrixEnabled(enabled)#
参数:

enabled – bool

如果 enable 为真,则启用变换;如果 enable 为假,则禁用变换。世界变换矩阵不变。

另请参阅

worldMatrixEnabled() worldTransform() 坐标变换

setWorldTransform(matrix[, combine=false])#
参数:

设置世界变换矩阵。如果 combine 为真,则将指定的 matrix 与当前矩阵结合;否则,它将替换当前矩阵。

剪切(sh, sv)#
参数:
  • sh – float

  • sv – float

通过 (sh, sv) 剪切坐标系。

另请参阅

setWorldTransform() Coordinate Transformations

strokePath(path, pen)#
参数:

使用指定由 pen 的笔绘制路径 path 的轮廓(线条)。

另请参阅

fillPath() 绘图

testRenderHint(hint)#
参数:

hintRenderHint

返回类型:

bool

如果 hint 被设置,则返回 true;否则返回 false

transform()#
返回类型:

QTransform

worldTransform() 的别名。返回世界变换矩阵。

translate(offset)#
参数:

offsetQPoint

这是一个重载函数。

通过给定的 offset 平移坐标系。

translate(offset)
参数:

offsetQPointF

通过给定的 offset 平移坐标系;也就是说,给定的 offset 会添加到点。

另请参阅

setWorldTransform() Coordinate Transformations

translate(dx, dy)
参数:
  • dx – float

  • dy – float

这是一个重载函数。

通过向量 (dx, dy) 平移坐标系。

viewTransformEnabled()#
返回类型:

bool

如果启用视图变换,返回 true;否则返回 false。

另请参阅

使用 setViewTransformEnabled()worldTransform() 方法。

viewport()#
返回类型:

QRect

返回视口矩形。

window()#
返回类型:

QRect

返回窗口矩形。

worldMatrixEnabled()#
返回类型:

bool

如果启用了世界变换,则返回 true,否则返回 false。

worldTransform()#
返回类型:

QTransform

返回世界变换矩阵。

另请参阅

setWorldTransform()