QGraphicsEffect
是 Qt 框架中用于为图形项(如 QGraphicsItem
、QGraphicsPixmapItem
、QWidget
等)添加视觉效果的基类。通过使用 QGraphicsEffect
,你可以改变图形项的外观,如添加模糊、阴影、颜色化、透明度等效果。
以下是如何使用 QGraphicsEffect
的一些基本步骤:
-
选择或创建效果:
- Qt 提供了一些预定义的
QGraphicsEffect
子类,如QGraphicsBlurEffect
(模糊效果)、QGraphicsDropShadowEffect
(阴影效果)、QGraphicsColorizeEffect
(颜色化效果)和QGraphicsOpacityEffect
(透明度效果)等。 - 如果需要自定义效果,你可以创建
QGraphicsEffect
的子类并重写draw()
方法。
- Qt 提供了一些预定义的
-
设置效果:
- 创建一个
QGraphicsEffect
对象(或使用预定义的子类)。 - 使用
QGraphicsItem
或QWidget
的setGraphicsEffect()
方法将效果应用到图形项上。
- 创建一个
-
管理效果:
- 如果需要更新效果(例如,更改模糊半径或阴影偏移量),请调用效果的
update()
方法。 - 如果你的自定义效果需要更改源的边界矩形,你可以重写
boundingRectFor()
方法,并在矩形发生变化时调用updateBoundingRect()
。 - 如果源发生更改(例如,图形项的像素图发生变化),请调用
sourceChanged()
方法以通知效果进行更新。
- 如果需要更新效果(例如,更改模糊半径或阴影偏移量),请调用效果的
-
调整效果属性:
- 对于某些效果(如
QGraphicsBlurEffect
),你可以调整其属性(如模糊半径)来改变效果的外观。
- 对于某些效果(如
-
移除效果:
- 要从图形项中移除效果,只需调用
setGraphicsEffect(nullptr)
。
- 要从图形项中移除效果,只需调用
以下是一个简单的示例,演示如何使用 QGraphicsBlurEffect
为 QGraphicsPixmapItem
添加模糊效果:
#include <QGraphicsPixmapItem>
#include <QGraphicsBlurEffect>
#include <QGraphicsScene>
#include <QGraphicsView>
// ...
// 创建一个 QGraphicsPixmapItem
QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap("path/to/image.png"));
// 创建一个 QGraphicsBlurEffect 对象并设置模糊半径
QGraphicsBlurEffect *blurEffect = new QGraphicsBlurEffect();
blurEffect->setBlurRadius(10); // 设置模糊半径为 10
// 将效果应用到 pixmapItem
pixmapItem->setGraphicsEffect(blurEffect);
// 将 pixmapItem 添加到 QGraphicsScene 中,并显示在 QGraphicsView 中
QGraphicsScene *scene = new QGraphicsScene();
scene->addItem(pixmapItem);
QGraphicsView *view = new QGraphicsView(scene);
view->show();
在这个示例中,我们首先创建了一个 QGraphicsPixmapItem
对象,并使用一张图片作为其像素图。然后,我们创建了一个 QGraphicsBlurEffect
对象,并设置了其模糊半径。最后,我们将这个效果应用到 pixmapItem
上,并将其添加到 QGraphicsScene
中进行显示。