[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