[Interest] QGraphicsScene crash after removeItem() and delete item

Alex Malyushytskyy alexmalvtk at gmail.com
Fri Dec 7 00:49:37 CET 2012


It is mostly likely related it is related to improper code in
QGraphicsItem subclass
which probably did not call

QGraphicsItem::prepareGeometryChange()

as Pierre mentioned before.

Alex



On Wed, Dec 5, 2012 at 5:29 PM, Jan Kundrát <jkt at flaska.net> wrote:
> On Thursday, 29 November 2012 12:33:58 CEST, Volker Poplawski wrote:
>>   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;
>>   }
>
> When you call removeItem, its children are removed from the scene as well; when you delete it, these children will be deleted immediately, too. Are you sure that none of the items in your m_items is a child of any item present earlier in that list?
>
> Have you tried to run your program under valgrind?
>
> And as a style suggestion, it might be better to rework the loop like this:
>
>   Q_FOREACH(QGraphicsItem *item, m_items) {
>     m_scene->removeItem(item);
>     delete item;
>   }
>   m_items.clear();
>
> QList very likely doesn't have much overhead even when used in this way, but it feels wrong to keep deleting a first item from a container which is not a linked list.
>
>> The interesting things is that without the removeItem() call,
>> i.e. just calling delete on the items, my program does not
>> crash.
>
> This is interesting.
>
> Cheers,
> Jan
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest



More information about the Interest mailing list