- class QGraphicsEffect#
QGraphicsEffect 类是所有图形效果的基类。更多…
继承自:
QGraphicsOpacityEffect
,QGraphicsDropShadowEffect
,QGraphicsColorizeEffect
,QGraphicsBlurEffect
自版本 4.6 起引入。
概述#
属性#
enabled
- 是否启用效果
方法#
def
__init__()
def
boundingRect()
def
drawSource()
def
isEnabled()
def
sourceIsPixmap()
def
sourcePixmap()
虚拟方法#
def
draw()
def
sourceChanged()
槽(Slots)#
def
setEnabled()
def
update()
信号(Signals)#
def
enabledChanged()
注意
本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在 https://bugreports.qt.io/projects/PYSIDE 上创建票据来告知我们。
详细描述#
效果通过挂钩渲染管道并在源(例如,一个
QGraphicsPixmapItem
)和目标设备(例如,QGraphicsView
的视口)之间操作来改变元素的外观。可以通过调用setEnabled
(false)来禁用效果。如果效果被禁用,则直接渲染源。要将视觉效果添加到
QGraphicsItem
,例如,您可以使用标准效果之一,或创建自己的效果,通过创建QGraphicsEffect
的子类。然后,可以使用setGraphicsEffect
方法安装在项目上。Qt 提供以下标准效果
QGraphicsBlurEffect
- 根据给定的半径模糊项QGraphicsDropShadowEffect
- 在项目后面渲染阴影QGraphicsColorizeEffect
- 以任何给定颜色的色调渲染项目QGraphicsOpacityEffect
- 以不透明度渲染项目
有关如何使用每个效果的更多信息,请参阅特定效果的文档。
要创建自己的自定义效果,创建
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#
此属性表示效果是否启用。
如果效果被禁用,则源将以正常方式渲染,没有任何效果干扰。如果效果被启用,节点将以应用了效果的方式绘制。
此属性默认启用。
使用此属性,可以在慢速平台上禁用某些效果,以确保用户界面响应。
- 访问器函数
构建一个新的
QGraphicsEffect
实例,具有指定的parent
。返回此效果的有效边界矩形,即源在设备坐标系中的边界矩形,并调整了效果本身应用的任何边距。
返回该效果的生效边界矩形,给定设备坐标中的提供的
rect
。当编写自己的自定义效果时,必须在任何可能导致此函数返回不同值的变化参数后调用updateBoundingRect()
。另请参阅
警告
本节包含从 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) ...
用户不应明确调用此函数,因为它仅用于重新实现目的。
警告
本节包含从 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 ...
另请参阅
- enabledChanged(enabled)#
- 参数:
enabled – bool
每当效果启用或禁用时,都会发出此信号。参数
enabled
包含效果的新启用状态。另请参阅
enabled
属性的通知信号。- isEnabled()#
- 返回类型:
bool
enabled
属性的获取器。- setEnabled(enable)#
- 参数:
enable – bool
另请参阅
enabled
属性的设置器。- sourceBoundingRect([system=Qt.LogicalCoordinates])#
- 参数:
system –
CoordinateSystem
- 返回类型:
返回将源映射到给定的
系统
的边界矩形。在
draw()
函数外部使用 Qt::DeviceCoordinates 调用此函数将给出未定义的结果,因为没有可用的设备上下文。另请参阅
- sourceChanged(flags)#
- 参数:
flags –
ChangeFlag
的组合
此虚拟函数由
QGraphicsEffect
调用以通知效果,源已更改。如果效果应用任何缓存,则必须清除此缓存以反映源的新的外观。参数
flags
描述了发生了什么变化。- sourceIsPixmap()#
- 返回类型:
bool
如果源实际上是位图,则返回
true
,例如,一个QGraphicsPixmapItem
.此函数对于优化很有用。例如,如果此函数返回
true
,则无需在设备坐标中绘制源以避免对位图进行缩放 - 由于此函数,源位图将被缩放。- sourcePixmap([system=Qt.LogicalCoordinates[, offset=None[, mode=QGraphicsEffect.PixmapPadMode.PadToEffectiveBoundingRect]]])#
- 参数:
system –
CoordinateSystem
offset –
QPoint
mode –
PixmapPadMode
- 返回类型:
返回一个已将源绘制到其中的 pixmap。
system
指定要用于源哪个坐标系。可选offset
参数返回当前 painter 应在何处绘制 pixmap 的偏移量。要控制如何填充 pixmap,请使用mode
参数。当
system
为 Qt::DeviceCoordinates 时,返回的位图会被裁剪到当前的绘制设备矩形中。在
draw()
函数外部使用 Qt::DeviceCoordinates 调用此函数将给出未定义的结果,因为没有可用的设备上下文。另请参阅
- update()#
安排对效果的重新绘制。当效果需要重新绘制时,请调用此函数。此函数不会触发源的重新绘制。
另请参阅
- updateBoundingRect()#
此函数在效果的边界矩形发生更改时通知效果框架。作为自定义效果作者,您必须在任何将导致虚拟
boundingRectFor()
函数返回不同值的所有参数更改时调用此函数。如果这有必要,此函数将调用
update()
。