Ersetzen des Layouts in einem QWidget durch ein anderes Layout

Ich habe ein Widget, das sich ändert, wenn eine Option umgeschaltet wird. Dies macht alle Layouts und Widgets ungültig. Ich behalte eine Liste aller Layouts, damit ich sie mit etwas Ähnlichem wie löschen kanndiese Antwort:

<code>class MyWidget(QFrame):
   # ...
   def reLayout(self):
      def deleteLayoutChilds(l):
         while l.count():
            item=l.takeAt(0)
            widget=item.widget()
            if widget: widget.deleteLater()
            else: deleteLayoutChilds(item.layout())
      for l in self.allLayouts: deleteLayoutChilds(l)

      # now install the new layout
      ##
      ## how to delete the old layout first?
      l=self.layout(); del l # no effect
      #
      layout=QGridLayout(self)
      ## warning: QLayout: Attempting to add QLayout "" to MyWidget "", which already has a layout.
</code>

Wie kann ich das alte Layout entfernen und das neue einstellen?

Die Dokumentation istziemlich knapp und anscheinend nicht direkt auf Python anwendbar:

QWidget.setLayout (self, QLayout)

Das QLayout-Argument hat sein Eigentum an Qt übertragen.

Legt den Layout-Manager für dieses Widget auf Layout fest.

Wenn auf diesem Widget bereits ein Layout-Manager installiert ist, können Sie mit QWidget keinen weiteren installieren. Sie müssen zuerst den vorhandenen Layout-Manager löschen (zurückgegeben von layout ()), bevor Sie setLayout () mit dem neuen Layout aufrufen können.

Wenn layout der Layout-Manager in einem anderen Widget ist, repariert setLayout () das Layout und macht es zum Layout-Manager für dieses Widget.

Beispiel:

<code> QVBoxLayout *layout = new QVBoxLayout;
 layout->addWidget(formWidget);
 setLayout(layout);
</code>

Eine Alternative zum Aufrufen dieser Funktion besteht darin, dieses Widget an den Konstruktor des Layouts zu übergeben.

Das QWidget übernimmt das Layout.

Siehe auch layout () und Layout Management.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage