[Interest] QGraphicsScene crash after removeItem() and delete item
Constantin Makshin
cmakshin at gmail.com
Fri Nov 30 11:47:04 CET 2012
Well, after following the link Volker gave me
(http://code.woboq.org/kde/qt4/src/) and looking at the code related to
removing/deleting QGraphicsItem-s I admit my guess was too random. :)
On 11/29/2012 06:53 PM, Constantin Makshin wrote:
> QGraphicsScene::removeItem() documentation says "Removes the item item
> and all its children from the scene."
>
> So here is my random guess:
> You remove an item which has at least one child. Some time later you
> call QGraphicsScene::removeItem() on one of its children and, since it's
> not part of the scene anymore, get a crash.
>
> I can't check this guess because Gitorious doesn't want to show the
> contents of qgraphicsscene.cpp and I'm too lazy to download the whole Qt
> tarball. :)
>
> On 11/29/2012 03:33 PM, Volker Poplawski wrote:
>> Hi everybody,
>>
>> I'm facing segfault in succession of deleting a number of QGraphicsItems from a scene.
>>
>> The following code leads to the stack trace below on the next redraw of the scene.
>>
>> while (not m_items.isEmpty())
>> {
>> QGraphicsItem *item = m_items.takeFirst();
>> m_scene->removeItem(item); // qtdoc says it's faster to remove item first then delete
>> delete item;
>> }
>>
>> The interesting things is that without the removeItem() call, i.e. just calling delete on the items, my program does not crash.
>>
>> 0 QGraphicsSceneFindItemBspTreeVisitor::visit(QList<QGraphicsItem*>*) 0x1075cff
>> 1 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 2 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074ce0
>> 3 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 4 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 5 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 6 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 7 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 8 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074c40
>> 9 QGraphicsSceneBspTree::climbTree(QGraphicsSceneBspTreeVisitor*, QRectF const&, int) const 0x1074ce0
>> 10 QGraphicsSceneBspTree::items(QRectF const&, bool) const 0x107539e
>> 11 QGraphicsSceneBspTreeIndexPrivate::estimateItems(QRectF const&, Qt::SortOrder, bool) 0xf24058
>> 12 QGraphicsSceneBspTreeIndex::estimateTopLevelItems(QRectF const&, Qt::SortOrder) const 0xf24233
>> 13 QGraphicsScenePrivate::drawItems(QPainter*, QTransform const*, QRegion*, QWidget*) 0xf194ad
>> 14 QGraphicsView::paintEvent(QPaintEvent*) 0xf3505c
>> 15 QWidget::event(QEvent*) 0xa6941a
>> 16 QFrame::event(QEvent*) 0xd81236
>> 17 QGraphicsView::viewportEvent(QEvent*) 0xf362bb
>> 18 QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) 0x11992b7
>> 19 QApplicationPrivate::notify_helper(QObject*, QEvent*) 0xa240f1
>> 20 QApplication::notify(QObject*, QEvent*) 0xa2c63f
>> ... <More>
>>
>> ....Volker
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: OpenPGP digital signature
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20121130/3478f2f0/attachment.sig>
More information about the Interest
mailing list