Seite 1 von 1

Mehrere QGraphicsItem löschen -> crash

Verfasst: 7. Mai 2009 15:12
von mikemc
Hallo ihr!

Ich möchte alle selektierten Items löschen. Da Items die gelöscht werden auch andere Items löschen, gehe ich das Ergebnis von QList mit einer Schleife durch und nach jedem Löschen forder ich eine neue Liste an.

Das half schon mal weiter. Jedoch habe ich seit neusten bei jedem Item eine
collidingItems - Abfrage (wenn ein Item gelösch wird) eingebaut. Und genau dort crasht das Programm manchmel wenn ich mehrere Items lösche.

hier meine Lösch-Funktion:

Code: Alles auswählen

void QMeineScene::deleteElements( )
{   
    bool bDelete;
    QList<QGraphicsItem *> pItemList;
    do
    {
        bDelete = false;        
        pItemList = selectedItems();
        foreach( QGraphicsItem* item, pItemList )
        {
            if ( item  )
            {
                Element *pElement = dynamic_cast< Element* >( item );
                if ( pElement )
                {                    
                    pElement->deleteonMatrix( ); // hier steckt die collidingItems - Abfrage!!
                    removeItem( item );
                    delete pElement;

                    // Da nach einem gelöschten Element auch weitere QGraphicsItems wegfallen können
                    // muss eine neue Liste der selektierten Items angefordert werden
                    bDelete = true;
                    pItemList.clear();
                    break;              
                }
            }
        }
    }
    while ( bDelete == true );  
    update();
}

Verfasst: 8. Mai 2009 19:28
von Christian81
Und wo genau crasht es ? Was sagt der Debugger?

Verfasst: 11. Mai 2009 18:27
von mikemc
Beim BSP-Tree der scheinbar für die Indexierung der GraphicsScene zuständig ist.

Der Fehler lag daran, dass ich an einer Stelle des Codes ein prepareGeometryChange() vergass. Ohne Indexierung gings, mit crashte es.

Jetzt funktionierts....