QLayout durch anderes QLayout ersetzen

Alles rund um die Programmierung mit Qt
Antworten
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

QLayout durch anderes QLayout ersetzen

Beitrag von michbex »

Wie kann ich Widgets die in einem Layout liegen durch andere ersetzen? Um die Frage zu vereinfachen:

Wie lautet die QT4 - funktion um alle Widgets aus meinem Layout zu entfernen ohne das Layout entfernen zu muessen? In QT 3 war das ja "deleteAllItems()"... genau sowas brauche ich.

Danke

Michael
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

geloest: QStackedWidget

Beitrag von michbex »

Loesung:
QStackedWidget verwenden. Macht genau das.

Michael
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: geloest: QStackedWidget

Beitrag von macman »

michbex hat geschrieben:QStackedWidget verwenden. Macht genau das.
Nein, macht es nicht. Ein QStackedWidget hält mehrere Layouts vor und zeigt nur eins an. Hast Du nicht auf der Seite geguckt, deren Link ich gepostet habe? Dort nach deleteAllItems suchen und man findet:
QLayout

In Qt 4, margins are always handled by layouts; there is no QLayout::setSupportsMargin() function anymore.

The deleteAllItems() function is now only available if QT3_SUPPORT is defined. If you maintain a QList of layout items, you can use qDeleteAll() to remove all the items in one go.
Das wäre das was Du gesucht hast, aber wenn Du mit einem QStackedWidget auch klar kommst, hast Du definitiv die falsche Frage gestellt :-).
mikro
Beiträge: 60
Registriert: 19. April 2006 09:23
Wohnort: Erlangen
Kontaktdaten:

Beitrag von mikro »

das klappt nicht, weil QWidgets nur QWidgets als Parent akzeptieren und somit keine QLayouts (die direkt von QObject abgeleitet sind).
setzt ein Frame auf das Layout und gib das als parent für deine Widgets. Dann klappt ein

Code: Alles auswählen

frame->hide();
qDeleteAll(frame->children());
delete frame->layout();
// und hier kannst Du dann dein neues Layout wieder als Layout für frame setzen
frame->show();
Antworten