[solved]Widgets aus einem QFrame mit Layoutmanager entfernen
Verfasst: 12. Mai 2009 17:00
Hallo,
ich habe hier ein Layout-Problem.
Ich habe hier ein QMainWindow mit mehreren QFrames, die alle Instanzvariablen sind. In den Frames sind jeweils einige QWidgets, die auch in den QFrames mit einem Layout-Manager angeordnet worden sind.
Zu einem Zeitpunkt x möchte ich aus einem Frame alle Widgets löschen und mit Neuen bestücken:
Funktioniert soweit auch. Es werden die Anzahl der Widgets plus das Layout, das bei den children auftaucht aus dem QFrame genommen. Allerdings bringt mir QFrame->layout() noch einen Rückgabewert.
Möchte ich nun einfach ein neues QVBoxLayout mit setLayout setzen und das wieder mit Widgets füllen, bekomme ich Folgendes (von Interesse ist nur der QFrame über dem Wort Configuration):

Aussehen sollte es so:

Mein Code:
Das plotsLayout ist auch eine Instanzvariable. Kann mir jemand erklären, wo mein Fehler ist, bzw. was ich machen muss, damit das funktioniert?
Ich mache dasselbe nach einem kompletten Durchlauf (aktuell müssen ein paar Frames noch während eines Durchlaufes geändert werden) und da ist bis zu der Wiederbestückung etwas mehr Zeit, da läuft alles ohne Probleme.
Danke schon mal
Alexander
ich habe hier ein Layout-Problem.
Ich habe hier ein QMainWindow mit mehreren QFrames, die alle Instanzvariablen sind. In den Frames sind jeweils einige QWidgets, die auch in den QFrames mit einem Layout-Manager angeordnet worden sind.
Zu einem Zeitpunkt x möchte ich aus einem Frame alle Widgets löschen und mit Neuen bestücken:
Code: Alles auswählen
void MainWindow::deleteFrameChilds(QFrame *frame)
{
QObjectList childs = frame->children();
while (!childs.isEmpty())
childs.takeFirst()->deleteLater();
}Möchte ich nun einfach ein neues QVBoxLayout mit setLayout setzen und das wieder mit Widgets füllen, bekomme ich Folgendes (von Interesse ist nur der QFrame über dem Wort Configuration):

Aussehen sollte es so:

Mein Code:
Code: Alles auswählen
plotsLayout = new QVBoxLayout;
plotsLayout->setAlignment(Qt::AlignTop);
plotArea->setLayout(plotsLayout);
plotArea->adjustSize();
Ich mache dasselbe nach einem kompletten Durchlauf (aktuell müssen ein paar Frames noch während eines Durchlaufes geändert werden) und da ist bis zu der Wiederbestückung etwas mehr Zeit, da läuft alles ohne Probleme.
Danke schon mal
Alexander