qt – 为什么在销毁它之前从它的场景中删除一个QGraphicsItem更有效率?

前端之家收集整理的这篇文章主要介绍了qt – 为什么在销毁它之前从它的场景中删除一个QGraphicsItem更有效率?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据 QGraphicsItem destructor documentation,“在销毁该项目之前,从QGraphicsScene中删除该项目更为有效.”

这是为什么?我不能想像如何才能有所作为.而如果它确实有所作为,那么QGraphicsItem析构函数应该不会调用

if (scene() != NULL)
    scene()->removeItem(this);

我检查了源码,这似乎并不是这样,虽然有时候我很难理解Qt源码.编辑:见jdi的回答.

解决方法

也许我正在解释文档与你不同(我没有看过来源):

QGraphicsItem::~QGraphicsItem () [virtual]
Destroys the QGraphicsItem
and all its children. If this item is currently associated with a
scene,the item will be removed from the scene before it is deleted.
Note: It is more efficient to remove the item from the QGraphicsScene
before destroying the item.

我认为这是因为它会在摧毁之前首先从场景中删除,因为这样更有效率.但是如果你说来源不表示发生这种情况,那么文件似乎是假的?

如果我不得不猜测为什么在摧毁它之前首先删除该项目会更有效(不管API是否真的为您在析构函数中执行),我认为这将与什么触发器有关reindex的场景.也许通过删除仍在场景中的项目,子项目的级联删除会不断地触发场景重新索引.而如果您要先删除该项目,则可以以仅需要单次更新场景的方式有效地拉出整个层次结构,然后可以进行正常删除而不会进一步影响?在场景中删除其他子事件/信号甚至可能会有更多的级联效应.

我注意到“注意”背后的逻辑是通知那些将子类化QGraphicsItem并重载析构函数的人,以便记住需要首先从场景中删除.

猜你在找的CSS相关文章