Sie müssen zuerst den vorhandenen Layoutmanager löschen (zurückgegeben von layout ()) , bevor Sie setLayout () mit dem neuen Layout aufrufen können.
von Ссылка
Welche Funktion wird zum Löschen des vorherigen Layouts verwendet?
Sie verwenden einfach
%Vor% wie bei jedem anderen Zeiger, den Sie mit new
erstellt haben.
Ich möchte das aktuelle Layout entfernen, es durch ein neues Layout ersetzen, aber alle Widgets beibehalten, die vom Layout verwaltet werden. Ich fand, dass die Lösung von Chris Wilson in diesem Fall nicht gut funktioniert. Das Layout wird nicht immer geändert.
Das hat für mich funktioniert:
%Vor%Ich weiß, diese Frage ist alt und beantwortet, aber: Da QtAlgorithms qDelteAll anbietet, ist es möglich, ein Layout zu löschen, einschließlich der Löschung aller seiner Kinder mit einem Einzeiler.
Dies ist eine Replikation des Textes, den ich hier gepostet habe: Ссылка
Dieser Code löscht das Layout, alle seine untergeordneten Elemente und alles innerhalb des Layouts verschwindet.
%Vor%Hier ist die Beschreibung der überladenen Funktion:
void qDeleteAll (ForwardIterator begin, ForwardIterator end)
Löscht alle Elemente im Bereich [begin, end] mit C ++ delete & gt; Operator. Der Elementtyp muss ein Zeigertyp sein (z. B. QWidget *).
Beachten Sie, dass qDeleteAll mit einem Container aus diesem Widget (nicht diesem Layout) gefüttert werden muss. Und beachte, dass qDeleteAll NICHT yourWidget
löscht - nur seine Kinder.
Jetzt kann ein neues Layout eingestellt werden.