我所做的:

我在 View (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共享相同的 QGraphicsBlurEffect ,以便可以通过调用轻松切换启用/禁用
m_blurEffect->setEnabled(false); //(true)

在 View 中(他们从那里获得指向效果的指针。

它能做什么:

在创建进度之后,似乎只有这些项目之一包含了指针。
我使用qDebug向我展示了创建新的QGraphicsItem后指向m_blurEffect的指针是否正确
for(...)
{
   QGraphicsItem *item= new TileGraphicsItem();
   item->setGraphicsEffect(m_blurEffect);
   qDebug() << m_blurEffect << tileItem->graphicsEffect();
}

输出正确,类似于:



QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)



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



除了最后创建的项目外,它包含正确的引用(在我的情况下为QGraphicsBlurEffect(0x139ce140))。

那我该怎么办?

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

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

最佳答案

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

关于c++ - 为许多QGraphicsItem共享相同的QGraphicsEffect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20576615/

10-11 15:16