对许多QGraphicsItems共享相同的QGraphicsEffect

Share the same QGraphicsEffect for many QGraphicsItems

本文关键字:QGraphicsEffect 共享 许多 QGraphicsItems      更新时间:2023-10-16

我的工作:

我正在视图(QMainWindow)的构造函数中创建一个新的QGraphicsEffect

QGraphicsBlurEffect *m_blurEffect = new QGraphicsBlurEffect(this);
QGraphicsScene *m_scene = new GameGraphicsScene();
QGraphicsView *m_graphicsView = new QGraphicsView();
m_graphicsView->setScene(m_scene);

然后我创建了几个QGraphicsItems:

QGraphicsItem *item = new QGraphicsItem;
item->setGraphicsEffect(m_blurEffect); //<< This Line is where I need help
m_scene->addItem(item);

我希望所有这些QGraphicsItems共享相同的QGraphicsLurEffect,这样我就可以通过调用来轻松切换启用/禁用

m_blurEffect->setEnabled(false); //(true)

在视图中(他们从中获得指向效果的指针。


它的作用:

在创建进度之后,这些项目中似乎只有一个包含指针。我使用qDebug来显示在创建新的QGraphicsItem 后指向m_blurEffect的指针是否正确

for(...)
{
   QGraphicsItem *item= new TileGraphicsItem();
   item->setGraphicsEffect(m_blurEffect);
   qDebug() << m_blurEffect << tileItem->graphicsEffect();
}

输出是正确的,类似于:

qDebug():[…]

Q图形模糊效应(0x139fe120)Q图形模糊效果(0x139fe120)

Q图形模糊效应(0x139fe120)Q图形模糊效果(0x139fe120)

Q图形模糊效应(0x139fe120)Q图形模糊效果(0x139fe120)

Q图形模糊效应(0x139fe120)Q图形模糊效果(0x139fe120)

[…]

为了进行更多检查,当我将鼠标悬停在项目上时,我让qDebug再次告诉我对m_blurEffect的引用。结果表明,它们都有空指针

qDebug() << graphicsEffect();
QObject(0x0)

除了最后一个创建的项之外,它包含正确的引用(在我的例子中是QGraphicsBlurEffect(0x139ce140))。


那么我该怎么办呢

我想实现的是,它们都共享对我在存在之前创建的一个QGraphicsEffect*对象的正确引用。

如有必要,我可以提供更多细节。

QGraphicsEffect s不能在多个图形项之间共享。您需要为每个图形项目创建一个具有图形效果的对象。参见QGraphicsItem::setGraphicsEffect:的文档

如果effect安装在其他项上,则setGraphicsEffect()将从该项中删除该效果并将其安装在此项上。QGraphicsItem拥有效果