Layout des Central Widgets
Verfasst: 6. Mai 2009 14:23
Hi,
es hat mich mal wieder verschlagen ... in die unergründlichen Tiefen von QTt.
Ich habe ein QMainWindow, und ein QWidget. Das QWidget hat über einen Layoutmanager mehrere Frames beinhaltet. Nach einem Durchlauf meines Programmes, in dem die Frames mit Inhalt gefüllt werden, möchte ich den Ausgangszustand wieder herstellen. Die Frames, das Widget und das MainWindow sind Instanzvariablen. Hier etwas Code:
Header-Datei:
Ausschnitt aus der Layouterzeugung. Ich lösche das alles indem ich zuerst die Childs der Frames lösche, danach die Frames an sich und danach wollte ich das Layout von dem mainWidget löschen (ist keine Instanzvariable):
Danach fluggs das neue Layout einbinden mit:
Resultat ist, dass ich ein komplett leeres MainWindow ohne auch nur irgendein Layout habe. Selbst ein einziges LCDNumber einbinden funktioniert nicht.
Was aber funktioniert ist das mainWidget zu löschen (also das CentralWidget) und dem MainWindow ein neues CentralWidet zu übergeben. Kann mir jemand erklären warum?
Die Doku sagt darüber: (QWidget)
Danke
Alexander
Nachtrag: Ein update() oder activate() brachte auch kein verwertbares Ergebnis
es hat mich mal wieder verschlagen ... in die unergründlichen Tiefen von QTt.
Ich habe ein QMainWindow, und ein QWidget. Das QWidget hat über einen Layoutmanager mehrere Frames beinhaltet. Nach einem Durchlauf meines Programmes, in dem die Frames mit Inhalt gefüllt werden, möchte ich den Ausgangszustand wieder herstellen. Die Frames, das Widget und das MainWindow sind Instanzvariablen. Hier etwas Code:
Header-Datei:
Code: Alles auswählen
QWidget *mainWidget;
QFrame *routeStreamFrame;Code: Alles auswählen
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
mainWidget = new QWidget();
mainWidget->setObjectName(QString::fromUtf8("mainWidget"));
}
void MainWindow::createLayout(){
QGridLayout *mainLayout = new QGridLayout();
routeStreamFrame = new QFrame();
...
mainLayout->addWidget(routeStreamFrame);
...
mainWidget->setLayout(mainLayout);
}Code: Alles auswählen
QLayout *mainLayout = mainWidget->layout();
mainLayout->deleteLater();
Code: Alles auswählen
mainWidget->setLayout(mainLayout);Was aber funktioniert ist das mainWidget zu löschen (also das CentralWidget) und dem MainWindow ein neues CentralWidet zu übergeben. Kann mir jemand erklären warum?
Die Doku sagt darüber: (QWidget)
Und zu dem CentralWidget:If there already is a layout manager installed on this widget, QWidget won't let you install another. You must first delete the existing layout manager (returned by layout()) before you can call setLayout() with the new layout.
Mir ist das allerdings überhaupt icht schlüssig, noch dazu, nachdem ich überprüft habe, ob die Instanzvariable mainWidget und der Returnwert von QMainWindow::centralWidget gleich sind.Sets the given widget to be the main window's central widget.
Note: QMainWindow takes ownership of the widget pointer and deletes it at the appropriate time.
Danke
Alexander
Nachtrag: Ein update() oder activate() brachte auch kein verwertbares Ergebnis