QWidget(QWizardPage) - Layout "on the fly" ändern nicht möglich



  • Ich bin gerade dabei, mir einen QWizard zu erstellen. Dabei habe ich mit einzelnen Seiten (QWizardPage) ein Problem:
    Bei jedem Aufruf einer Seite soll das Layout der Seite neu erstellt werden. Leider schaffe ich es jedoch nicht, das Layout zu "entleeren", das Zufügen neuer Widgets funktioniert jedoch gut. Das ganze führt dazu, dass beim zweiten Besuch der Seite der Inhalt äußerst vermatscht aussehen kann.

    Hier mal ein wenig Code:

    //Erstellen der Seite
    QGridLayout * layout = new QGridLayout();
    setLayout(layout);
    
    //dies wird bei jedem Seitenaufruf ausgeführt
    QGridLayout * layout = static_cast<QGridLayout *>(this->layout());
    
    QLayoutItem * child;
    while((child = layout->takeAt(0)) != 0)
    	 delete child;
    //Bestückung des Layouts
    

    Wie schon gesagt funktioniert das Zufügen von Widgets zum Layout bei jedem Seitenaufruf, das Entfernen funktioniert angeblich auch (die QLayoutItems lassen sich wirklich löschen), aber das Widget, dass das Layout nutzt, wird einfach nicht von den Geister-Widgets befreit und zeigt stets alles an, was ich dort jemals eingefügt habe.

    Wo ist mein Denkfehler? 😕



  • Falls es nochmal jemand braucht:
    Das Problem lässt sich lösen, man muss nur jedes Item, das aus dem Layout entfernt wird, zuvor verstecken - ansonsten bleiben im Layout optische Rückstände der zuvor vorhandenen Objekte übrig, was äußerst unschön ist.

    In meinem Fall sieht der Code dann so aus:

    QGridLayout * layout = static_cast<QGridLayout *>(this->layout());
    
    for(int i = 0 ; i < checkboxes->count() ; i ++)
         checkboxes->at(i)->hide();//in meinem Layout waren nur QCheckBoxes enthalten
    
    QLayoutItem * child;
    while((child = layout->takeAt(0)) != 0)
         delete child;
    //Layout neu bestücken
    

Anmelden zum Antworten