class QQuickPaintedItem#

QQuickPaintedItem 提供了一种在 QML 场景图中使用 QPainter API 的方法。 更多

Inheritance diagram of PySide6.QtQuick.QQuickPaintedItem

概览#

属性#

方法#

虚函数#

信号#

注意

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

详细说明#

《QQuickPaintedItem》允许在QML场景图中使用QPainter API。它在场景图中设置了一个纹理矩形,并使用QPainter在纹理上绘制。Qt 6的渲染目标是始终为QImage。当渲染目标为QImage时,QPainter首先将内容渲染到图像中,然后将其上传到纹理。调用update()来触发重绘。

为了启用QPainter进行抗锯齿渲染,请使用setAntialiasing()

要编写自己的绘制项,您首先创建《QQuickPaintedItem》的子类,然后开始实现其唯一的纯虚公共函数:paint(),它实现实际的绘制。绘制将在从0,0到width()height()的矩形内进行。

注意

理解此类物品可能带来的性能影响非常重要。请参阅《RenderTarget》和《renderTarget》。

另请参阅

场景图 - 绘制项 使用C++编写QML扩展

class QmlIsUncreatable#
class RenderTarget#

此枚举描述了《QQuickPaintedItem》的渲染目标。渲染目标是在物品渲染到屏幕上之前,QPainter在上面绘制表面的表面。

常量

描述

QQuickPaintedItem.Image

默认值;QPainter使用光栅绘制引擎将内容绘制到QImage中。在随后,需要将图像的内容上传到图形内存,如果是大型物品,此操作可能较慢。此渲染目标允许高质量的抗锯齿和快速物品调整大小。

QQuickPaintedItem.FramebufferObject

截至Qt 6.0,此值被忽略。

QQuickPaintedItem.InvertedYFramebufferObject

截至Qt 6.0,此值被忽略。

另请参阅

setRenderTarget()

class PerformanceHint#

(继承自enum.Flag)此枚举描述了您可以启用以在《QQuickPaintedItem》中提高渲染性能的标志。默认情况下,没有设置这些标志。

常量

描述

QQuickPaintedItem.FastFBOResizing

截至Qt 6.0,此值被忽略。

注意

当使用 from __feature__ import true_property 时可以直接使用属性,否则通过访问函数来使用。

property contentsScale: float#

此属性存储已过时的内容缩放方法。

此函数提供用于兼容性,在使用 size()textureSize() 结合来决定你要绘制的尺寸。

访问函数
property contentsSize: QSize#

此属性存储已过时的设置内容尺寸的方法。

此函数提供用于兼容性,使用 size 结合 textureSize 来决定你要绘制的尺寸。

访问函数
property fillColor: QColor#

此属性存储元素的背景填充颜色。

默认情况下,填充颜色设置为 Qt::transparent。

将填充颜色设置为无效颜色(例如桂林色())以禁用背景填充。这可能提高性能,并且当 paint() 函数foreach帧绘制到所有像素时是安全的。

访问函数
property renderTarget: QQuickPaintedItem.RenderTarget#

此属性存储元素的渲染目标。

该属性定义了 QPainter 将渲染到的渲染目标是什么,可以是以下之一:ImageFramebufferObjectInvertedYFramebufferObject

每个都有某些优点,通常是性能与质量的权衡。使用帧缓冲区对象可以避免将图像内容上载到图形内存中的纹理的开销,而使用图像则可以实现高质量的反走样。

警告

调整帧缓冲区对象的大小是一个代价高昂的操作,如果项目经常调整大小,请避免使用 FramebufferObject 渲染目标。

默认情况下,渲染目标是 Image

访问函数
propertytextureSizeᅟ: QSize#

该属性定义了纹理的大小。

更改纹理的大小不会影响在 paint() 中使用的坐标系。相反,会应用一个尺度因子,因此绘画仍应发生在 0,0 到 width()height() 之间。

默认情况下,纹理大小将与该项目的大小相同。

注意

如果项目位于与1不同的设备像素比窗口中,该尺度因子将隐式应用于纹理大小。

访问函数
__init__([parent=None])#
参数:

parentQQuickItem

使用指定的 parent 项构建一个 QQuickPaintedItem

contentsBoundingRect()#
返回类型:

QRectF

此函数提供用于兼容性,使用 size 结合 textureSize 来决定你要绘制的尺寸。

contentsScale()#
返回类型:

float

另请参阅

setContentsScale()

属性 contentsScale 的获取器。

contentsScaleChanged()#

属性 contentsScale 的通知信号。

contentsSize()#
返回类型:

QSize

另请参阅

setContentsSize()

属性 contentsSize 的获取器。

contentsSizeChanged()#

属性 contentsSize 的通知信号。

fillColor()#
返回类型:

QColor

另请参阅

setFillColor()

属性 fillColor 的获取器。

fillColorChanged()#

属性 fillColor 的通知信号。

mipmap()#
返回类型:

bool

如果启用mipmap返回true,否则返回false。

默认情况下,不会启用mipmap。

另请参阅

setMipmap()

opaquePainting()#
返回类型:

bool

如果此项目是不透明的返回true,否则返回false。

默认情况下,绘制项目不是不透明的。

另请参阅

setOpaquePainting()

abstract paint(painter)#
参数:

painterQPainter

这个函数通常由QML场景图调用,使用本地坐标绘制项的内容。

当设置时,底层的纹理大小由 textureSize 定义,或者项目的大小,乘以窗口的设备像素比。

在项目填充了 fillColor 后,会调用这个函数。

在子类 QQuickPaintedItem 中重写此函数,以提供对象的绘制实现,使用 painter

注意

QML场景图使用两个独立的线程,主线程负责处理事件或更新动画等,而第二个线程负责实际发出图形资源更新和记录绘图调用。因此,paint() 不是从主GUI线程调用,而是从启用了GL的渲染线程调用。在调用paint()的时候,GUI线程会被阻塞,因此它是线程安全的。

警告

在创建QObjects、发出信号、启动计时器等操作时,必须格外小心,因为这些操作将与渲染线程有关联。

performanceHints()#
返回类型:

PerformanceHint 的组合

返回性能提示。

默认情况下,不启用任何性能提示。

renderTarget()#
返回类型:

RenderTarget

另请参阅

setRenderTarget()

属性 renderTargetᅟ 的getter。

renderTargetChanged()#

属性 renderTargetᅟ 的变更通知信号。

resetContentsSize()#

此便利函数等价于调用 setContentsSize (QSize())。

setContentsScale(arg__1)#
参数:

arg__1 – float

另请参阅

contentsScale()

属性 contentsScaleᅟ 的setter。

setContentsSize(arg__1)#
参数:

arg__1QSize

另请参阅

contentsSize()

设置属性 contentsSize 的值。

setFillColor(arg__1)#
参数:

arg__1QColor

另请参阅

fillColor()

设置属性 fillColor 的值。

setMipmap(enable)#
参数:

enable – 布尔型

如果 enable 为真,将关联纹理启用米格映射。

米格映射可以提高窗口缩放时的渲染速度,并减少走样伪影。

默认情况下,不会启用mipmap。

另请参阅

mipmap()

setOpaquePainting(opaque)#
参数:

opaque – 布尔型

如果 opaque 为真,则该项不透明;否则,被认为是半透明的。

不透明项不会与场景中的其他部分混合,如果该项的内容不透明,则您应将其设置为 true 以加速渲染。

默认情况下,绘制项目不是不透明的。

另请参阅

opaquePainting()

setPerformanceHint(hint[, enabled=true])#
参数:

如果 enabled 为真,则将给定的性能 hint 设置在项上;否则清除性能提示。

默认情况下,没有启用性能提示。

setPerformanceHints(hints)#
参数:

hintsPerformanceHint 的组合

将性能提示设置为 hints

默认情况下,没有启用性能提示。

setRenderTarget(target)#
参数:

targetRenderTarget

另请参阅

renderTarget()

属性 renderTarget 的设置器。

setTextureSize(size)#
参数:

sizeQSize

另请参阅

textureSize()

属性 textureSize 的设置器。

textureSize()#
返回类型:

QSize

另请参阅

setTextureSize()

属性 textureSize 的获取器。

textureSizeChanged()#

属性 textureSize 的通知信号。

update([rect=QRect()])#
参数:

rectQRect

安排在此项中重绘由 rect 涵盖的区域。当您的小部件需要重新绘制时,可以调用此函数,例如外观或大小发生变化。

此函数不会立即绘图;相反,它会安排一个绘制请求,该请求由 QML 场景图在渲染下一帧时处理。只有当该项可见时,才会重新绘制该项。

另请参阅

paint()