2013-04-12 25 views
7

Ich versuche, ein Floating (abgedockt) QDockWidget in den Vollbildmodus zu versetzen. Unter Windows scheint alles klar zu sein. Zum Beispiel verbinden die topLevelChanged i() Signal eines dockwidget (dw) zu einem benutzerdefinierten Schlitz floatingChanged()QDockWidget showFullscreen funktioniert nicht auf Ubuntu (Gnome)

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool))); 

innerhalb des Schlitzes i überprüfen: Wenn dw floatet und rufen DW-> showFullscreen().

void MainWindow::floatingChanged(bool floating) 
{ 
    if(floating) 
    { 
     QDockWidget* dw = static_cast<QDockWidget*>(QObject::sender()); 
     dw->showFullScreen(); 
    } 
} 

in Fenstern angedockten (floating) QDockWidget schaltet direkt in den Vollbildmodus nach dem Abdocken. Aber unter linux (ubuntu 12.04, gnome-shell 3.4.1) funktioniert das nicht (4.8.0). Das Dock-Widget bleibt einfach im normalen Modus.

Ich kann nicht herausfinden, wie man ein (schwebendes) QDockWidget in den Vollbildmodus schaltet. Irgendwelche Lösungen dazu sind sehr willkommen. Tatsächlich verhalten sich die verschiedenen Betriebssysteme zu diesem Zweck unterschiedlich.

Ich habe bereits im Internet ohne Erfolg gesucht, so dass dies mein erster Beitrag hier ist. Bitte verzeihen Sie mir für Rechtschreibfehler ich bin nicht englischer Sprecher, danke;)

p.s. Ich werde auch Osx-Löwen-Verhalten versuchen. Übrigens: Um es auszuprobieren, implementieren Sie einfach den oben gezeigten floatingChanged() - Slot im MainWindow des Qt-Beispiels http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.html und verbinden Sie ihn mit einem der vorhandenen Dockwidgets oder innerhalb der MainWindow :: createDockWidget() -Methode.

+0

Auf Osx-Löwe ​​mit Qt 4.8.2 verhält sich auch anders. Das Dock-Widget wird nach dem Aufruf von dw-> showFullScreen() einfach maximiert angezeigt. Dies bedeutet, dass die Titelleiste angezeigt wird/wurde; Win XP hatte ein echtes Vollbild-Verhalten, bei dem auch die Titelleiste abwesend war - das ist es, was ich von einem Vollbildmodus erwarte. – xam

+0

Ich fand eine Art von Arbeit mit Stylesheets. Ich habe es im Qt-Center-Forum erklärt: [link] (http://www.qtcentre.org/threads/54178-QDockWidget-showFullScreen%28%29-only-works-on-Windows). Weitere Hinweise sind sehr willkommen ... – xam

+0

Verhalten sich [dieses minimale Beispiel] (http://ideone.com/RIvk4C) so, wie Sie es in Ihrem Setup beschrieben haben? Es scheint zu funktionieren wie erwartet auf meinem. – brunocodutra

Antwort

2

Der Aufruf dieser Funktion showFullScreen() betrifft nur Windows.

Vollbildmodus funktioniert gut unter Windows, hat aber bestimmte Probleme unter X. Diese Probleme sind auf Einschränkungen des ICCCM-Protokolls zurückzuführen, das die Kommunikation zwischen X11-Clients und dem Fenstermanager angibt. ICCCM versteht einfach nicht das Konzept von nicht dekorierten Vollbildfenstern. Daher ist es am besten, wenn Sie ein randloses Fenster anfordern und es so platzieren und skalieren, dass es den gesamten Bildschirm ausfüllt. Abhängig vom Fenstermanager kann dies funktionieren oder nicht. Das grenzenlose Fenster wird mit Hilfe von MOTIF-Hinweisen angefordert, die von nahezu allen modernen Fenstermanagern zumindest teilweise unterstützt werden. Eine Alternative wäre, den Fenstermanager vollständig zu umgehen und ein Fenster mit dem Qt :: X11BypassWindowManagerHint-Flag zu erstellen. Dies hat jedoch andere schwerwiegende Probleme, wie zum Beispiel einen total defekten Tastaturfokus und sehr seltsame Effekte auf Desktop-Änderungen oder wenn der Benutzer andere Fenster anhebt. X11-Fenstermanager, die den modernen Post-ICCCM-Spezifikationen folgen, unterstützen den Vollbildmodus ordnungsgemäß.

Verwandte Themen