Mehrere QGraphicsItem löschen -> crash

Alles rund um die Programmierung mit Qt
Antworten
mikemc
Beiträge: 42
Registriert: 11. Februar 2009 15:27

Mehrere QGraphicsItem löschen -> crash

Beitrag 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();
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo genau crasht es ? Was sagt der Debugger?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mikemc
Beiträge: 42
Registriert: 11. Februar 2009 15:27

Beitrag 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....
Antworten