CSS   发布时间:2022-04-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了qt – 为什么在销毁它之前从它的场景中删除一个QGraphicsItem更有效率?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
根据 QGraphicsItem destructor documentation,“在销毁该项目之前,从QGraphicsScene中删除该项目更为有效.”

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

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

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

解决方法

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

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

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

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

大佬总结

以上是大佬教程为你收集整理的qt – 为什么在销毁它之前从它的场景中删除一个QGraphicsItem更有效率?全部内容,希望文章能够帮你解决qt – 为什么在销毁它之前从它的场景中删除一个QGraphicsItem更有效率?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。