QGraphicsEffect 类
QGraphicsEffect类是所有图形效果的基类。
| Header: | #include < QGraphicsEffect > |
|---|---|
| qmake: | QT += widgets |
| Inherits: | QObject |
| Inherited By: | QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, QGraphicsOpacityEffect |
| Since: | Qt 4.6 |

详述
特效通过连接到渲染管道来改变元素的外观,并在源设备(例如,QGraphicsPixmapItem)和目标设备(例如,QGraphicsView的viewport)之间操作。可以通过调用setEnabled(false)来禁用效果。如果特效被禁用,则直接渲染源。
例如,要向QGraphicsItem添加视觉效果,您可以使用一种标准效果,或者通过创建QGraphicsEffect的子类来创建您自己的效果。然后可以使用QGraphicsItem::setGraphicsEffect()将效果安装在项目上。
Qt提供以下标准效果:
- QGraphicsBlurEffect—按给定半径模糊项目
- QGraphicsDropShadowEffect—在项目后面渲染一个阴影
- QGraphicsColorizeEffect—以任何给定颜色的阴影渲染项目
- QGraphicsOpacityEffect—使用不透明度渲染项目
![]() | |
|---|---|
![]() | ![]() |
![]() | ![]() |

有关如何使用每种效果的更多信息,请参阅特定效果的文档。
要创建您自己的自定义效果,请创建QGraphicsEffect(或任何其他现有效果)的子类,并重新实现虚函数draw()。这个函数在需要重绘效果时被调用。draw()函数将绘制所用的绘制器作为参数。有关更多信息,请参阅draw()的文档。在draw()函数中,您可以调用sourcePixmap()来获得图形效果源的像素图,然后您可以对其进行处理。
如果你的效果改变了,使用update()请求重新绘制。如果你的自定义效果改变了源的边框,例如,一个径向发光效果可能需要应用一个额外的边框,你可以重新实现虚拟的boundingRectFor()函数,并调用updateBoundingRect()来通知框架,每当这个矩形发生变化。virtual sourceChanged()函数会被调用,以通知效果源以某种方式发生了变化——例如,如果源是一个qgraphicsrectem,并且它的矩形参数发生了变化。
参见QGraphicsItem::setGraphicsEffect()和QWidget::setGraphicsEffect()。
公共类型
enum ChangeFlag
flags ChangeFlags
该枚举描述了QGraphicsEffectSource中发生的变化。
| Constant | Value | Description |
|---|---|---|
| QGraphicsEffect::SourceAttached | 0x1 | 效果安装在源上。 |
| QGraphicsEffect::SourceDetached | 0x2 | 在源上卸载效果。 |
| QGraphicsEffect::SourceBoundingRectChanged | 0x4 | 源的边界矩形已经改变。 |
| QGraphicsEffect::SourceInvalidated | 0x8 | 源的外观发生了变化。 |
enum PixmapPadMode
该枚举描述了如何填充从sourcePixmap返回的像素映射。
| Constant | Value | Description |
|---|---|---|
| QGraphicsEffect::NoPad | 0 | 像素图不应该接收任何额外的填充。 |
| QGraphicsEffect::PadToTransparentBorder | 1 | 像素图应该被填充,以确保它有一个完全透明的边界。 |
| QGraphicsEffect::PadToEffectiveBoundingRect | 2 | 像素图应该被填充以匹配效果的有效边界矩形。 |
属性
enabled : bool
此属性保存是否启用该效果
如果一个效果被禁用,源将以正常方式呈现,不会受到效果的干扰。如果启用了该效果,则将应用该效果来渲染源。
此属性在默认情况下是启用的。
使用此属性,您可以在速度较慢的平台上禁用某些效果,以确保用户界面是响应性的。
Access functions:
- bool isEnabled() const
- void setEnabled(bool enable)
Notifier signal:
- void enabledChanged(bool enabled)
公共函数
构造和析构
- QGraphicsEffect(QObject *parent = nullptr)
- virtual ~QGraphicsEffect()
属性
- bool isEnabled() const
- void setEnabled(bool enable)
边界
- QRectF boundingRect() const
- virtual QRectF boundingRectFor(const QRectF &rect) const
公共槽
- void setEnabled(bool enable)
- void update()
信号
- void enabledChanged(bool enabled)
受保护的函数
- virtual void draw(QPainter *painter) = 0
- void drawSource(QPainter *painter)
- QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
- virtual void sourceChanged(QGraphicsEffect::ChangeFlags flags)
- bool sourceIsPixmap() const
- QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const
- void updateBoundingRect()
QGraphicsEffect详解
本文介绍QGraphicsEffect类,它是Qt中用于实现各种图形特效的基础类。通过连接到渲染管道,可以改变元素外观,并提供了禁用特效的功能。文章还介绍了如何创建自定义效果,包括重新实现draw()函数和使用sourcePixmap()获取像素图。





511

被折叠的 条评论
为什么被折叠?



