Fenster in QWorkspace neu anordnen
-
Hi all,
ich habe in mein QMainWindow eine Klasse, die von QWorkspace ableitet, reingesetzt. Um ein Fenster im QWorkspace zu erzeugen, gehe ich so vor:
QWidget *window = new QWidget(); addWindow(window ); window ->show(); tile();
Auf diese Weise werden neu erzeugte Fenster im "tile pattern" angeordnet.
Wenn ich ein Fenster schliesse entsteht an der Stelle (wo das Fenster war) eine "leere Stelle". Das finde ich aber nicht so toll. Am liebsten würde ich in diesem Moment alle im QWorkspace geöffneten Fenster neu anordnen, so dass sie wieder im "tile pattern" vorliegen (ohne Lücke dazwischen).
Wenn ich nach dem Schließen (closeEvent()
) einfach nur
tile()
aufrufe, passiert nichts.
Kann mir jemand weiterhelfen? Danke.Kerstin
-
Ich hab in der Doku nichts darueber gefunden, ob closeEvent vor oder nach dem Schließen aufgerufen wird. Ich vermute einmal davor. Deswegen ist das Widget bei tile() noch vorhanden. Probier es vielleicht mit hide zu verstecken und dann tile nochmal aufzurufen.
-
Danke, das hat soweit funktioniert.
Nun wollte ich meine Fenster überlappend mit der FunktionQWorkspace::cascade()
darstellen, bloß leider funktioniert das nicht so wie ich mir das vorgestellt habe. Die Fenster sind beim Aufruf von cascade() zwar überlappend, aber minimiert. Ich habe mich mal durch den Qt-Code gesteppt... Dabei habe ich herausgefunden, dass die Größe meiner überlappenden Fenster immer 8x34px groß ist, obwohl ich vorher separat die Größe der einzelne Fenster verändert hatte:
QWidgetList childWindows = MyWorkspace->windowList(); int size = childWindows.size(); for( int i=0; i<size; ++i ) { QWidget *widget = childWindows.at(i); if( !widget ) continue; QWidget *parentWidget = widget->parentWidget(); if( !parentWidget ) continue; parentWidget->setBaseSize(400, 300); }
Der Grund dafür ist, dass in der cascade()-Funktion nicht (wie ich erwarte) die Funktion
QSize QWidget::baseSize() const
sondern die Funktion
QSize QWorkspaceChild::baseSize() const
aufgerufen wird, die mir immer die Werte 8 und 32 zurückgibt.
Momentan hab ich erstmal nicht cascade() verwendet, sondern die Größe des Fenster selbst neu gesetzt und so funktioniert es erstmal:
parentWidget->setGeometry(x, y, 400, 300); x += xoffset; y += yoffset;
Nichtsdestotrotz würde mich brennend interessieren, ob jemand von euch das selbe Problem hat oder ob ich etwas falsch gemacht habe bei der ganze Sache...
Viele Dank für die Aufmerksamkeit.