如何正确删除QGraphicsItem?

时间:2014-11-28 12:19:48

标签: qt

我应该怎么做才能删除QGraphicsItem?

要从我使用的场景中删除项目

 QGraphicsScene::removeItem(QGraphicsItem * item);

来自此方法的文档:

  

即,QGraphicsScene将在销毁时不再删除项目

所以我只看到一种方式:

delete item;

但可能是另一个?例如,QWidget能够设置属性

setAttribute( Qt::WA_DeleteOnClose );

导致删除对象。 QGraphicsItem可能有类似内容吗?

2 个答案:

答案 0 :(得分:4)

不幸的是,QGraphicsItemQGraphicsScene内可用的所有图形项的基类,并且,大多数"类似项目" Qt中的对象不是来自QWidgetQObject。此外,它们只能作为另一个QGraphicsItem的父级(除了归QGraphicsScene所有。

从场景中删除项目后,除非它是另一个QGraphicsItem的父级,Qt希望程序员通过显式调用delete item;手动删除它(或使用智能指针管理生命周期删除后的项目。)

答案 1 :(得分:0)

今天这个问题似乎持续了很长时间,而且还存在一些未解决的错误。

但是似乎有一种解决方法,我发现它很有用,经过数小时的调试,阅读和调查,我在这里找到了解决方法:

https://forum.qt.io/topic/71316/qgraphicsscenefinditembsptreevisitor-visit-crashes-due-to-an-obsolete-paintevent-after-qgraphicsscene-removeitem/17

此处有一些有关Graphics Scene的其他提示和技巧:https://tech-artists.org/t/qt-properly-removing-qgraphicitems/3063/6