> qgraphicsscene_bsp Maybe you can try to change the indexing mode. I remember having unexplainable crashes with the BSP tree in early 5.x versions... See : http://doc.qt.io/qt-5/qgraphicsscene.html#itemIndexMethod-prop
Best Jean-Michaël On Sat, Jun 25, 2016 at 9:04 PM, Igor Mironchik <igor.mironc...@gmail.com> wrote: > Hi. > > Removing of scene()->removeItem( item ); solved the problem. > > I read old mailing list about such problem, yet in Qt 4. And guys advised > to put prepareGeometryChange(). I checked it, and with this method app > crashes more frequently. > > And removing removeItem() solves the problem. > > So problem is very old. May be somebody know what is the reason? > > > On 25.06.2016 19:40, Igor Mironchik wrote: > >> Hi, >> >> I ran into a problem. When I delete item (QGraphicsItem) from scene I >> received following crash: >> >> 1 QGraphicsSceneFindItemBspTreeVisitor::visit qgraphicsscene_bsp.cpp >> 77 0x7ffff76aeb24 >> 2 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 245 >> 0x7ffff76ae6dc >> 3 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 259 >> 0x7ffff76ae7ba >> 4 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 250 >> 0x7ffff76ae71b >> 5 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 259 >> 0x7ffff76ae7ba >> 6 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 250 >> 0x7ffff76ae71b >> 7 QGraphicsSceneBspTree::climbTree qgraphicsscene_bsp.cpp 259 >> 0x7ffff76ae7ba >> 8 QGraphicsSceneBspTree::items qgraphicsscene_bsp.cpp 152 >> 0x7ffff76adb8a >> 9 QGraphicsSceneBspTreeIndexPrivate::estimateItems >> qgraphicsscenebsptreeindex.cpp 389 0x7ffff76b1c14 >> 10 QGraphicsSceneBspTreeIndex::estimateTopLevelItems >> qgraphicsscenebsptreeindex.cpp 543 0x7ffff76b24d5 >> 11 QGraphicsScenePrivate::drawItems qgraphicsscene.cpp 4712 >> 0x7ffff76937b9 >> 12 QGraphicsView::paintEvent qgraphicsview.cpp 3550 >> 0x7ffff76cc13a >> 13 QWidget::event qwidget.cpp 8930 0x7ffff72b0d9e >> 14 QFrame::event qframe.cpp 550 0x7ffff73ff4a5 >> 15 QAbstractScrollArea::viewportEvent qabstractscrollarea.cpp >> 1213 0x7ffff74b92e0 >> 16 QGraphicsView::viewportEvent qgraphicsview.cpp 2973 0x7ffff76c9930 >> 17 QAbstractScrollAreaPrivate::viewportEvent qabstractscrollarea_p.h >> 111 0x7ffff74ba6d3 >> 18 QAbstractScrollAreaFilter::eventFilter qabstractscrollarea_p.h >> 127 0x7ffff74ba7be >> 19 QCoreApplicationPrivate::sendThroughObjectEventFilters >> qcoreapplication.cpp 1099 0x7ffff65a222f >> 20 QApplicationPrivate::notify_helper qapplication.cpp >> 3795 0x7ffff725a201 >> ... <More> >> >> Where visit() is: >> >> void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE >> { >> for (int i = 0; i < items->size(); ++i) { >> QGraphicsItem *item = items->at(i); >> if (onlyTopLevelItems && item->d_ptr->parent) >> item = item->topLevelItem(); >> if (!item->d_func()->itemDiscovered && item->d_ptr->visible) { >> item->d_func()->itemDiscovered = 1; >> foundItems->prepend(item); >> } >> } >> } >> >> I did two deletions and in this method I received two broken >> QGraphicsItems: >> >> >> Locals >> i 1 int >> item @0x706990 QGraphicsItem >> [vptr] <not accessible> >> [0] >> d_ptr 12884901888 QScopedPointer<QGraphicsItemPrivate, >> QScopedPointerDeleter<QGraphicsItemPrivate> > >> items <4 items> QList<QGraphicsItem*> >> [0] @0x866070 Prototyper::Core::GridSnap >> [1] @0x706990 QGraphicsItem >> [vptr] 0x0 >> d_ptr 12884901888 QScopedPointer<QGraphicsItemPrivate, >> QScopedPointerDeleter<QGraphicsItemPrivate> > >> [2] @0x706990 QGraphicsItem >> [vptr] 0x0 >> d_ptr 12884901888 QScopedPointer<QGraphicsItemPrivate, >> QScopedPointerDeleter<QGraphicsItemPrivate> > >> [3] @0x866110 Prototyper::Core::Form >> this @0x865f40 QGraphicsSceneFindItemBspTreeVisitor >> Inspector >> Expressions >> Return Value >> Tooltip >> FormAction <not accessible> >> FormResizeHandle <not accessible> >> Q_DECL_OVERRIDE <no such value> >> WithResizeAndMoveHandles <not accessible> >> foundItems <1 items> QList<QGraphicsItem*> >> m_bottom <not accessible> >> onlyTopLevelItems true bool >> setDeltaToZero <not accessible> >> >> My delete method is: >> >> void >> Form::deleteItems( const QList< QGraphicsItem* > & items ) >> { >> foreach( QGraphicsItem * item, items ) >> { >> if( item == d->m_current ) >> d->m_current = 0; >> >> FormObject * obj = dynamic_cast< FormObject* > ( item ); >> >> if( obj ) >> { >> pushUndoDeleteCommand( d->m_undoStack, obj, this ); >> >> d->m_model->removeObject( obj, this ); >> >> d->removeDescriptions( obj ); >> } >> >> scene()->removeItem( item ); >> >> if( obj ) >> { >> d->m_model->endRemoveObject(); >> >> d->m_ids.removeOne( obj->objectId() ); >> >> switch( obj->objectType() ) >> { >> case FormObject::GroupType : >> { >> FormGroup * group = dynamic_cast< FormGroup* > ( item >> ); >> >> if( group ) >> { >> d->clearIds( group ); >> >> group->postDeletion(); >> } >> } >> break; >> >> default : >> { >> obj->postDeletion(); >> } >> break; >> } >> } >> >> delete item; >> } >> } >> >> I do scene()->removeItem( item ); and delete item; but in the internals >> of QGraphicsScene I got two damaged pointers... >> >> What is the problem? Thank you. >> >> P.S. postDeletion() methods now is empty, like: >> >> void postDeletion() >> { >> } >> >> > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest >
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest