Seite 1 von 1

setLayout auf QDialog mit bereits gesetztem Layout

Verfasst: 16. August 2009 17:48
von brimborium
Hallo,

Ich habe eine Klasse Game, die von QDialog abgeleitet ist. Darin platziere ich ein QVBoxLayout:

Code: Alles auswählen

void Game::runInterface() {
	setWindowState(Qt::WindowFullScreen);
	l = new QVBoxLayout(this);
	currentScreen = 0;
	l->addWidget(screens[currentScreen]);
	l->addWidget(score);
	setLayout(l); show();
	update();
}
screens ist eine QList<Screen*> von Objekten der Klasse Screen (abgeleitet aus QWidget) und score ist ein Pointer auf ein Objekt der Klasse Score (ebenfalls von QWidget abgeleitet).

Nun funktioniert das ganze auch sehr gut. Jetzt möchte ich aber mit einem Tastendruck (Code ist im Constructor von Game):

Code: Alles auswählen

(void) new QShortcut(Qt::Key_Down, this, SLOT(nextScreen()));
Das nächste Element aus screens laden. Ich habe mir das so gedacht:

Code: Alles auswählen

void Game::nextScreen() {
	if (currentScreen+1 < screens.length()) {
		currentScreen++;
	}
	delete layout();
	l = new QVBoxLayout(this);
	l->addWidget(screens[currentScreen]);
	l->addWidget(score);
	setLayout(l); show();
	update();
}
Das compiled soweit auch, aber irgendwie wird das alte Layout nicht gelöscht, sondern das neue einfach drübergemalt. Wie kann ich das alte Layout auflösen (ohne die aktuellen Objekte im Layout zu löschen).

Ich hoffe, das war einigermassen klar. ;) Vielen Dank.

Stefan

Verfasst: 16. August 2009 20:03
von Christian81
Du suchst QWidgetStack und/oder QWizard

Verfasst: 16. August 2009 20:36
von brimborium
Oh ja, QWidgetStack sieht sehr vielversprechend aus. Probier ich gleich aus, sobald ich wieder zuhause bin. Vielen Dank für den Tipp.

Verfasst: 16. August 2009 22:01
von brimborium
Also, QWidgetStack ist Qt3, das Qt4.5 Pendant dazu heisst QStackedWidget und funktioniert genau so, wie ich mir das vorgestellt habe. Nochmals vielen Dank für den Tipp. :)