首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确删除QGraphicsItem?

如何正确删除QGraphicsItem?
EN

Stack Overflow用户
提问于 2014-11-28 12:19:48
回答 2查看 13K关注 0票数 8

我应该做些什么来删除QGraphicsItem?

若要从场景中删除项目,请执行以下操作

代码语言:javascript
运行
复制
 QGraphicsScene::removeItem(QGraphicsItem * item);

来自此方法的文档:

也就是说,QGraphicsScene在销毁时将不再删除项目

所以我只看到一种方法:

代码语言:javascript
运行
复制
delete item;

但可能是另一种?例如,对于QWidget,可以设置属性

代码语言:javascript
运行
复制
setAttribute( Qt::WA_DeleteOnClose );

这会导致删除对象。QGraphicsItem可能也有类似的地方吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-28 13:25:29

不幸的是,QGraphicsItem是在QGraphicsScene中可用的所有图形项的基类,作为Qt中大多数“类似项”的对象,它不是从QWidgetQObject派生的。此外,它们只能由另一个QGraphicsItem (除了由QGraphicsScene拥有)父子关系。

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

票数 10
EN

Stack Overflow用户

发布于 2020-05-27 16:06:39

今天这个问题似乎持续了很长一段时间,而且也有一些开放的bug。

但它似乎有一个解决办法,我觉得它很有用,经过几个小时的调试、阅读和调查,我在这里找到了它:

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

这里还有一些关于图形场景的技巧和技巧:https://tech-artists.org/t/qt-properly-removing-qgraphicitems/3063/6

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27188538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档