从场景中删除QGraphicsProxyWidget后崩溃

时间:2014-02-09 20:38:42

标签: qt crash qgraphicsscene

我有一个添加了QGraphicsProxyWidget的简单场景(以及设置的一些小部件)。

如果我尝试将其从场景中删除,就像这样:

if ( widget )
{
parentScene->removeItem( m_widget ); // m_widget is a QGraphicsProxyWidget
delete m_widget; // I also tried m_widget->deleteLater() here - same result
m_widget = NULL;
}

我立即崩溃 - 没有描述性的callstack,虽然这会告诉我什么是错的(在callstack中有一些与Windows相关的调用,而这就是全部)。

我正在使用Qt库的5.1.1版本,我在手册和网上搜索了如何实际删除这样一个小部件的说明,而且根本没有记录,所以我不确定是否我在那里做错了,或者库中有错误。

我很感激任何帮助。

干杯,

Piotr

2 个答案:

答案 0 :(得分:0)

检查您的if声明:当您可能需要widget时,它会显示m_widget。如果widget为非null且m_widget为null,则程序将崩溃,因为对removeItem / delete的调用将尝试引用空指针。

答案 1 :(得分:0)

我发现问题 - 看似无关的'prepareGeometryChange'调用是在这里责备的。 我的小部件正在改变大小(我没有提到它,因为它当时似乎无关紧要)。然而,在我更改几何图形之后,我正在调用上述方法,而不是之前,正如手册指示的那样。

显然,该方法非常重要,以便按顺序保持场景的内部数据,并且由于我的调用不正确,它会对已删除的项目留下一些无效的引用。