为许多QGraphicsItem共享相同的QGraphicsEffect

时间:2013-12-13 21:49:44

标签: c++ qt opengl reference qgraphicsitem

我的所作所为:

我在视图(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)

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


它的作用:

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

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

输出正确,如:

  

qDebug():   [...]

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

QGraphicsBlurEffect(0x139fe120)QGraphicsBlurEffect(0x139fe120)

  

[...]

为了更多检查,当我将鼠标悬停在Items上时,让qDebug再次告诉我对m_blurEffect的引用。 结果显示,所有这些都有空指针

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

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


那我该怎么办?

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

如有必要,我可以提供进一步的细节。

1 个答案:

答案 0 :(得分:1)

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

  

如果效果安装在不同的项目上,setGraphicsEffect()将从项目中删除效果并将其安装在此项目上。 QGraphicsItem取得效果的所有权。