[solved]Widgets aus einem QFrame mit Layoutmanager entfernen

Alles rund um die Programmierung mit Qt
Antworten
cooky1976
Beiträge: 76
Registriert: 24. Januar 2008 00:19

[solved]Widgets aus einem QFrame mit Layoutmanager entfernen

Beitrag von cooky1976 »

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:

Code: Alles auswählen

void MainWindow::deleteFrameChilds(QFrame *frame)
{
    QObjectList childs = frame->children();
    while (!childs.isEmpty())
         childs.takeFirst()->deleteLater();
}
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):
Bild
Aussehen sollte es so:
Bild
Mein Code:

Code: Alles auswählen

    plotsLayout = new QVBoxLayout;
    plotsLayout->setAlignment(Qt::AlignTop);
    plotArea->setLayout(plotsLayout);
    plotArea->adjustSize();
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
Zuletzt geändert von cooky1976 am 13. Mai 2009 21:33, insgesamt 1-mal geändert.
cooky1976
Beiträge: 76
Registriert: 24. Januar 2008 00:19

Beitrag von cooky1976 »

Hat hier überhaupt keiner einen Tipp, wie man aus einem gefüllten QWidet mit Layoutmanager wieder Widgets rausbekommt oder ist die Antwort so simpel, dass ich auf dem Schlauch stehe?
cooky1976
Beiträge: 76
Registriert: 24. Januar 2008 00:19

Beitrag von cooky1976 »

Ich habe eine Lösung gefunden.

Ich brauche ja nicht zwingend einen neuen Layout-Manager. Ich kann ja den nehmen, den ich schon habe. Und daraus resultiert dann, das ich nur die QWidgets des Frames lösche. Dies geht über:
QFrame *frame (Instanzvariable)

Code: Alles auswählen

    QLayoutItem *child;
    while ((child = frame->layout()->takeAt(0)) != 0) {
        QWidget curWidget;
        if (child->widget() != 0) {
            child->widget()->close();
        }
    }
Antworten