Ich weiß, wie man ein QWidget (in Qt4 oder Qt5)/QWindow (seit Qt5) randlos erstellt, eine benutzerdefinierte Titelleiste zeichnet und das Mausziehen manuell implementiert Verschieben Sie das Fenster auf dem Bildschirm, indem Sie einfach die Mausposition mit einigen mouseMoveEvent
verfolgen und die Fensterposition aktualisieren.QWidget/QWindow Titelleiste: benutzerdefiniertes Aussehen, natives Feeling (ähnlich wie Chrome)
Diese Bewegung verhält sich jedoch anders als die native, wie vom Fenstermanager implementiert. Zum Beispiel kann das Fenster in der Nähe des Bildschirmrands als "Vollbild" oder "geteilter Bildschirm" interpretiert werden; oder Fenster werden abhängig vom System-/Fenstermanager an den Grenzen des jeweils anderen Fensters ausgerichtet. Diese Dinge funktionieren nicht, wenn Sie die Fensterbewegung wie oben implementieren.
Google Chrome/Chromium ist nur ein Beispiel für eine Anwendung, die eine benutzerdefinierte Fenstertitelleiste und einen Rahmen implementiert und sich gleichzeitig an das native Verhalten des Fenstermanagers anpasst. Ich frage mich, ob Chrome diese selbst implementiert (und den Window-Manager und seine Konfiguration erkennt) oder ob es in den meisten Window-Managern einige Funktionen gibt (klar, das ist immer noch stark plattformabhängig), um "native Window-Bewegung zu starten" und "stoppe native Fensterbewegung" oder ähnliches.
Ist so etwas in Qt möglich? Wenn nicht, vielleicht mit anderen Bibliotheken wie Qxt?
FYI: Ich bin hauptsächlich auf Windows und Linux ausgerichtet, wo ich sehe, die Schwierigkeit, die der Benutzer kann jeder Window Manager installiert haben.
@ BЈовић (bearbeiten): Es ist nicht Qt5 spezifisch. Der Titel war irreführend. – leemes
Könnte diese Frage für Ihr Problem relevant sein (zumindest unter Windows): http://stackoverflow.com/questions/11979278/wm-syscommand-sc-move-eats-up-mouse-events-and-mouse-up- ist-nicht-gefeuert –
@Roku Ausgezeichnet, vielen Dank. Das sollte für Windows gut funktionieren, denke ich. Also immer noch auf der Suche nach einer Lösung, die unter Linux funktioniert. – leemes