我想删除QGraphicsScene中的所有项目并删除它们。像这样,
<service
android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name="com.example.pranshusrivastav.fcmtest.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
答案 0 :(得分:0)
如果您要删除场景中的所有项目,为什么不进行“清除”,如下所示。 你有正确的场景对象。
scene-&GT;清晰();
根据文件: void QGraphicsScene :: clear()
从场景中删除和删除所有项目,但不会保持场景状态不变。
此功能在Qt 4.4中引入。
答案 1 :(得分:0)
代码看起来不错,但我同意只使用QGraphicsScene :: clear更有意义;它确实如此,我的猜测是效率更高。
如果您已派生自己的QGraphicsItem对象,则检查派生类中的析构函数以删除多个内存。您可能会对哪个对象拥有特定指针感到困惑,导致两个不同的项目释放相同的内存。
答案 2 :(得分:0)
你使用指针,当你使用函数clear时,它会调用女儿的析构函数,但是使用指针你必须销毁所有指针。不要使用foreach,尝试使用简单的for循环,因为foreach使用迭代器,我认为删除后迭代器无效。
for(int i=0; i < v.size(); ++i)
{
delete v[i];
v[i] = nullptr ;
}
答案 3 :(得分:0)
迟到的答案,但有人可能会觉得它很有用。
我多次遇到此问题,不仅是在删除项目时,而且在更改项目的位置或尺寸时也是如此。
每次都有效的只是添加
item->prepareGeometryChange();
在执行任何删除/更改尺寸之前。
为什么?不知道。