Dockwidgets und tabify probleme

Alles rund um die Programmierung mit Qt
Antworten
x57
Beiträge: 11
Registriert: 26. November 2007 15:06

Dockwidgets und tabify probleme

Beitrag von x57 »

Hi!

Ich habe eine Qt-Applikation (Qt 4.2.3 commercial, VisualStudio 2005, WinXP Pro) in der ich mehrere von QWidget abgeleitete Klassen habe, die ich auf Menubefehl in QDockWidgets einbette und anzeige. Der user kann diese Widgets dann frei floaten / docken und auch zu Tabs in den DockWidgetAreas "stapeln".
Mein Problem ist, dass ich eine Funktion schreiben möchte, die einen definiertes Anfangslayout der Anwendung wieder herstellt (alle DockWidgets in einem TabWidget in der LeftDockArea).

1.
Ich habe es schon mit QMainWindow::saveState / ::restoreState versucht, aber nach dem restore werden alle mein widgets wild übereinandergezeichnet in der linken, oberen Ecke dargestellt ... warum?


2.
Mein nächster Versuch war, alle QDockWidgets zu deleten und mein Standardlayout wieder von Grund auf neu zu erstellen. Hierbei ist das Problem, dass nach dem deleten der QDockWidgets ein QTabWidget mit leeren Tabs in der DockWidgetArea übrigbleibt. Dieses scheint mir intern durch meine Benutzung von QMainWindow::tabifyDockWidget erzeugt worden zu sein. Mittels QObject::dumpObjectTree() auf dem MainWidget kann ich kein QTabWidget finden.
Wie kann ich es entfernen?


3.
Eine weitere seltsame Sache in verbindung mit der Initialisierung ist, dass ich vor jedem tabifyDockWidgets-Aufruf qApp->processEvents() aufrufen muss, damit das Layout am Ende korrekt ist und nicht ein DockWidget über das vorherige gezeichnet wird ... mache ich da was falsch?

Hier der Initialisierungscode für meine Dockwidgets

Code: Alles auswählen


void MyMainWindow::setupMyLayout() {
	// configure initial dockwidgets
	QDockWidget* dw;
	dw = new QDockWidget("MyMenu1", this);
	dw->setWidget(MyWidget1);
	addDockWidget(Qt::LeftDockWidgetArea, dw);

	QDockWidget* dw2;
	dw2 = new QDockWidget("MyMenu2" ,this);
	dw2->setWidget(MyWidget2);
	qApp->processEvents(); // <<<<<<< ohne das werden dw und dw2 übereinandergezeichnet ?!
	tabifyDockWidget(dw, dw2);

	QDockWidget* dw3;
        ...
}
Bin für jede Hilfe dankbar!
Antworten