PySide6.QtWidgets.QGraphicsEffect

class QGraphicsEffect

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

PySide6.QtWidgets.QGraphicsEffect 的继承图

继承自: QGraphicsOpacityEffect, QGraphicsDropShadowEffect, QGraphicsColorizeEffect, QGraphicsBlurEffect

在版本4.6中添加。

概要

属性

方法

虚拟方法

插槽

信号

注意

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

详细描述

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

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

Qt 提供了以下标准效果:

../../_images/graphicseffect-plain.png
../../_images/graphicseffect-colorize.png ../../_images/graphicseffect-colorize.png
../../_images/graphicseffect-drop-shadow.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

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

如果效果被禁用,源将正常渲染,不受效果的影响。如果效果启用,源将应用效果进行渲染。

此属性默认启用。

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

Access functions:
__init__([parent=None])
Parameters:

父对象QObject

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

boundingRect()
Return type:

QRectF

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

boundingRectFor(sourceRect)
Parameters:

sourceRectQRectF

Return type:

QRectF

返回此效果的有效边界矩形,给定设备坐标中的rect。在编写自定义效果时,每当任何可能导致此函数返回不同值的参数发生更改时,必须调用updateBoundingRect()

另请参阅

sourceBoundingRect()

abstract draw(painter)
Parameters:

画家QPainter

警告

本节包含从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)
Parameters:

画家QPainter

警告

本节包含从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)
Parameters:

enabled – 布尔值

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

另请参阅

isEnabled()

属性 enabledᅟ 的通知信号。

isEnabled()
Return type:

布尔

属性 enabledᅟ 的获取器。

setEnabled(enable)
Parameters:

enable – 布尔值

另请参阅

isEnabled()

属性 enabledᅟ 的设置器。

sourceBoundingRect([system=Qt.LogicalCoordinates])
Parameters:

系统CoordinateSystem

Return type:

QRectF

返回映射到给定system的源边界矩形。

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

另请参阅

draw()

sourceChanged(flags)
Parameters:

flagsChangeFlag 的组合

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

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

sourceIsPixmap()
Return type:

布尔

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

此函数对于优化目的非常有用。例如,如果此函数返回true,则无需在设备坐标中绘制源以避免位图缩放 - 源位图无论如何都会被缩放。

sourcePixmap([system=Qt.LogicalCoordinates[, offset=None[, mode=QGraphicsEffect.PixmapPadMode.PadToEffectiveBoundingRect]]])
Parameters:
Return type:

QPixmap

返回一个绘制了源图像的pixmap。

system 指定用于源的坐标系。可选的 offset 参数返回使用当前画师绘制像素图时应绘制的偏移量。要控制像素图的填充方式,请使用 mode 参数。

system为Qt::DeviceCoordinates时,返回的pixmap会被裁剪到当前画家的设备矩形。

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

另请参阅

draw() boundingRect()

update()

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

另请参阅

updateBoundingRect()

updateBoundingRect()

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

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