我有一个添加了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
答案 0 :(得分:0)
检查您的if
声明:当您可能需要widget
时,它会显示m_widget
。如果widget
为非null且m_widget
为null,则程序将崩溃,因为对removeItem
/ delete
的调用将尝试引用空指针。
答案 1 :(得分:0)
我发现问题 - 看似无关的'prepareGeometryChange'调用是在这里责备的。 我的小部件正在改变大小(我没有提到它,因为它当时似乎无关紧要)。然而,在我更改几何图形之后,我正在调用上述方法,而不是之前,正如手册指示的那样。
显然,该方法非常重要,以便按顺序保持场景的内部数据,并且由于我的调用不正确,它会对已删除的项目留下一些无效的引用。