Layouts werden direkt auf ihre Elternobjekte angewendet. Dadurch können wir den Aufruf von setLayout()
weglassen. Im QGroupBox
-Beispiel haben wir dieses Feature bereits verwendet. Wichtig ist, dass das Elternobjekt bereits ein gültiges Widget ist, damit es nicht zu folgenden Fehlern kommt:
#include <QPushButton> #include <QVBoxLayout> #include <QApplication> int main( int argc, char *argv[] ) { QApplication app( argc, argv ); QWidget *w; QPushButton *button1, *button2; QVBoxLayout *layout; button1 = new QPushButton( "Button 1" ); button2 = new QPushButton( "Button 2" ); layout = new QVBoxLayout( w ); layout->addWidget( button1 ); layout->addWidget( button2 ); w = new QWidget(); w->show(); return app.exec(); }
Dieses Programm stürzt natürlich sofort ab, da in der Widget-Variable Speichermüll steht.
Layouts geben auch automatisch die Elternschaft über ein eingefügtes Widget an ihr eigenes Parent-Objekt weiter. Deshalb verursacht folgende Zeile, wie wir sie im Beispiel zu QGridLayout
verwendet haben, kein Speicherleck:
layout->addWidget( new ... );
Der Speicher des Widgets wird von jenem Widget freigegeben, auf das das Layout angewendet wird.