class QGraphicsEffect#

QGraphicsEffect 类是所有图形效果的基类。更多

Inheritance diagram of PySide6.QtWidgets.QGraphicsEffect

继承自: QGraphicsOpacityEffect, QGraphicsDropShadowEffect, QGraphicsColorizeEffect, QGraphicsBlurEffect

自版本 4.6 起引入。

概述#

属性#

方法#

虚拟方法#

槽(Slots)#

信号(Signals)#

注意

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

详细描述#

效果通过挂钩渲染管道并在源(例如,一个 QGraphicsPixmapItem )和目标设备(例如,QGraphicsView 的视口)之间操作来改变元素的外观。可以通过调用 setEnabled(false)来禁用效果。如果效果被禁用,则直接渲染源。

要将视觉效果添加到 QGraphicsItem ,例如,您可以使用标准效果之一,或创建自己的效果,通过创建 QGraphicsEffect 的子类。然后,可以使用 setGraphicsEffect 方法安装在项目上。

Qt 提供以下标准效果

../../_images/graphicseffect-plain.png
../../_images/graphicseffect-blur.png ../../_images/graphicseffect-colorize.png
../../_images/graphicseffect-opacity.png ../../_images/graphicseffect-drop-shadow.png
../../_images/graphicseffect-widget.png

有关如何使用每个效果的更多信息,请参阅特定效果的文档。

要创建自己的自定义效果,创建 QGraphicsEffect 的子类(或任何其他现有效果),并重新实现虚拟函数 draw() 。这个函数在效果需要重新绘制时被调用。该 draw() 函数接受一个作为参数的画家,用于绘制。有关更多信息,请参阅 draw() 的文档。在 draw() 函数中,您可以调用 sourcePixmap() 以获取图形效果源的位图,然后进行进程处理。

如果您的效果发生变化,请使用 update() 请求重新绘制。如果您的自定义效果更改了源的边界矩形,例如,径向发光效果可能需要应用额外边距,您可以重新实现虚拟的 boundingRectFor() 函数,并调用 updateBoundingRect() 以通知框架每次此矩形更改。虚拟的 sourceChanged() 函数会被调用,以通知效果源在某种程度上发生了变化 - 例如,如果源是 QGraphicsRectItem 且其矩形参数已更改。

class ChangeFlag#

(继承自 enum.Flag) 此枚举描述了在 QGraphicsEffectSource 中的更改。

常量

描述

QGraphicsEffect.SourceAttached

效果被安装到了一个源上。

QGraphicsEffect.SourceDetached

效果被从源上卸载。

QGraphicsEffect.SourceBoundingRectChanged

源的边界矩形已更改。

QGraphicsEffect.SourceInvalidated

源的视觉表现已更改。

class PixmapPadMode#

此枚举描述了从 sourcePixmap 返回的位图应该如何填充。

常量

描述

QGraphicsEffect.NoPad

位图不应接受任何额外的填充。

QGraphicsEffect.PadToTransparentBorder

位图应填充以确保完全透明的边缘。

QGraphicsEffect.PadToEffectiveBoundingRect

位图应填充以匹配效果的预期边界矩形。

注意

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

property enabledᅟ: bool#

此属性表示效果是否启用。

如果效果被禁用,则源将以正常方式渲染,没有任何效果干扰。如果效果被启用,节点将以应用了效果的方式绘制。

此属性默认启用。

使用此属性,可以在慢速平台上禁用某些效果,以确保用户界面响应。

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

parentQObject

构建一个新的 QGraphicsEffect 实例,具有指定的 parent

boundingRect()#
返回类型:

QRectF

返回此效果的有效边界矩形,即源在设备坐标系中的边界矩形,并调整了效果本身应用的任何边距。

boundingRectFor(sourceRect)#
参数:

sourceRectQRectF

返回类型:

QRectF

返回该效果的生效边界矩形,给定设备坐标中的提供的 rect。当编写自己的自定义效果时,必须在任何可能导致此函数返回不同值的变化参数后调用 updateBoundingRect()

另请参阅

sourceBoundingRect()

abstract draw(painter)#
参数:

painterQPainter

警告

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

这是一个纯虚函数,用于绘制效果,并且在源需要绘制时被调用。

QGraphicsEffect 子类中重新实现此函数,以便使用 painter 提供效果的绘制实现。

例如

MyGraphicsEffect::draw(QPainter painter)

    ...
    offset = QPoint()
    if sourceIsPixmap():
        # No point in drawing in device coordinates (pixmap will be scaled anyways).
        pixmap = sourcePixmap(Qt.LogicalCoordinates, offset)
        ...
        painter.drawPixmap(offset, pixmap)
    else:
        # Draw pixmap in device coordinates to avoid pixmap scaling
        pixmap = sourcePixmap(Qt.DeviceCoordinates, offset)
        painter.setWorldTransform(QTransform())
        ...
        painter.drawPixmap(offset, pixmap)

    ...

用户不应明确调用此函数,因为它仅用于重新实现目的。

drawSource(painter)#
参数:

painterQPainter

警告

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

使用给定的 painter 直接绘制源。

此函数应仅从 draw() 中调用。

例如

MyGraphicsOpacityEffect::draw(QPainter painter)

    # Fully opaque; draw directly without going through a pixmap.
    if qFuzzyCompare(m_opacity, 1):
        drawSource(painter)
        return

    ...

另请参阅

draw()

enabledChanged(enabled)#
参数:

enabled – bool

每当效果启用或禁用时,都会发出此信号。参数 enabled 包含效果的新启用状态。

另请参阅

isEnabled()

enabled 属性的通知信号。

isEnabled()#
返回类型:

bool

enabled 属性的获取器。

setEnabled(enable)#
参数:

enable – bool

另请参阅

isEnabled()

enabled 属性的设置器。

sourceBoundingRect([system=Qt.LogicalCoordinates])#
参数:

systemCoordinateSystem

返回类型:

QRectF

返回将源映射到给定的 系统 的边界矩形。

draw() 函数外部使用 Qt::DeviceCoordinates 调用此函数将给出未定义的结果,因为没有可用的设备上下文。

另请参阅

draw()

sourceChanged(flags)#
参数:

flagsChangeFlag 的组合

此虚拟函数由 QGraphicsEffect 调用以通知效果,源已更改。如果效果应用任何缓存,则必须清除此缓存以反映源的新的外观。

参数 flags 描述了发生了什么变化。

sourceIsPixmap()#
返回类型:

bool

如果源实际上是位图,则返回 true,例如,一个 QGraphicsPixmapItem .

此函数对于优化很有用。例如,如果此函数返回 true,则无需在设备坐标中绘制源以避免对位图进行缩放 - 由于此函数,源位图将被缩放。

sourcePixmap([system=Qt.LogicalCoordinates[, offset=None[, mode=QGraphicsEffect.PixmapPadMode.PadToEffectiveBoundingRect]]])#
参数:
返回类型:

QPixmap

返回一个已将源绘制到其中的 pixmap。

system 指定要用于源哪个坐标系。可选 offset 参数返回当前 painter 应在何处绘制 pixmap 的偏移量。要控制如何填充 pixmap,请使用 mode 参数。

system 为 Qt::DeviceCoordinates 时,返回的位图会被裁剪到当前的绘制设备矩形中。

draw() 函数外部使用 Qt::DeviceCoordinates 调用此函数将给出未定义的结果,因为没有可用的设备上下文。

另请参阅

draw() boundingRect()

update()#

安排对效果的重新绘制。当效果需要重新绘制时,请调用此函数。此函数不会触发源的重新绘制。

另请参阅

updateBoundingRect()

updateBoundingRect()#

此函数在效果的边界矩形发生更改时通知效果框架。作为自定义效果作者,您必须在任何将导致虚拟 boundingRectFor() 函数返回不同值的所有参数更改时调用此函数。

如果这有必要,此函数将调用 update()