QT: Alle Elemente eines Layouts löschen



  • Hi,

    ich erstelle mein Layout dynamisch basierend auf ein paar Eingabeparametern. Wenn sich diese ändern, muss das Layout folglich neu erstellt werden, was ein Löschen aller bisherigen Elemente bedingt.

    Ich bin aber nicht sicher, wie ich das Löschen richtig machen muss. Ich habe aus der Doku ein wenig was gelesen, aber es kommt hin und wieder dennoch zu Speicherfehlern. Ich habe noch andere Stellen in Verdacht, jedoch möchte ich bei dieser zunächst sichergehen. Mein Code lautet:

    // Delete all children
    	while(QLayoutItem* item = ui.lineActionsLayout->takeAt(0))
    	{
    		//if(item->layout())
    		//	delete item->layout();
    		delete item->widget();
    	}
    

    lineActionsLayout ist ein VBoxLayout, das alles enthält, was ausgetauscht (= gelöscht + neu erstellt) werden soll. Den auskommentieren Bereich hatte ich testweise probiert. Er führt zu keinem Fehler, aber über die Notwendig bin ich unsicher.

    Die QT Doku ist eigentlich eindeutig: http://qt-project.org/doc/qt-4.8/qlayout.html#takeAt

    Aber da dort ständig Fehler vorkommen (z.B. bzgl. QThread) möchte ich lieber noch einmal sichergehen. Beispielsweise könnte man überlegen die Layouts zu löschen. Und wer weiß, was sich hinter der ... -Zeile verbirgt?! Ich hoffe hier auf kompetente Antwoten 🙂

    Vielen Dank im Voraus!


  • Mod

    Hm, evtl. removeItem nutzen, damit das auch korrekt ausgetragen aus dem Layout wird.
    Alternativ, kannst du natürlich auch das QBoxLayout mit einem neuen überschreiben.


Log in to reply