Phi*_*ier 4 c++ qgraphicsitem qgraphicsscene qt5
我正在使用QGraphicsScene自定义项目类的实例填充 a ( inherting QGraphicsPathItem)。在运行时的某个时刻,我尝试通过调用以下命令从场景中删除一个项目(及其子项目):
delete pItem;
Run Code Online (Sandbox Code Playgroud)
这会自动调用,但是它也会导致下次重绘期间QGraphicsScene::removeItem()类崩溃。QGraphicsSceneFindItemBspTreeVisitor
TL;DR:解决方案是确保在项目从场景中移除之前QGraphicsItem::prepareGeometryChange()被调用。
问题在于,在从场景中移除项目期间,场景内部索引未正确更新,导致下次尝试绘制场景时崩溃。
因为在我的例子中,我使用 的自定义子类QGraphicsPathItem,所以我只是将调用放入QGraphicsItem::prepareGeometryChange()其析构函数中,因为我没有手动从场景中删除该项目(通过QGraphicsScene::removeItem()),而是简单地调用delete pItem;它来返回触发该项目的析构函数稍后removeItem()。