Qt 5, erhalten Sie die Mausposition in einem Bildschirm

8

Zunächst möchte ich erwähnen, dass ich den zugehörigen Post gefunden habe Wie bekomme ich die Mausposition auf dem Bildschirm in Qt? , aber es" hat einfach nicht funktioniert "für mich. Ich habe einige Tests gemacht, und die Ergebnisse haben nicht so funktioniert, wie ich es erwartet hatte, also habe ich beschlossen, einen neuen Beitrag zu schreiben, um über den Test zu sprechen und eine alternative Lösung zu finden.

Das ist der Code, mit dem ich den Test gemacht habe:

%Vor%

Was ich erwartet habe, ist, dass nur ein Bildschirm eine gültige Position zurückgibt, da der Cursor nur auf einem Bildschirm ist, nicht auf beiden. Aber das ist nicht der Fall, die beiden Positionen ( pos0 und pos1 ) haben genau den gleichen Wert, wie wir auf der Ausgabe sehen können:

%Vor%

Da beide Positionen die gleichen Werte haben, kann ich nicht wissen, auf welchem ​​Bildschirm sich der Cursor befindet. Ich weiß nicht, ob das ein normales Verhalten oder ein Fehler ist, da die Dokumentation nicht sagt, was passiert, wenn das Bildschirmargument nicht der Bildschirm ist, auf dem sich die Maus befindet.

Meine Idee ist das Öffnen / Starten einer Anwendung (die von einem Qt-Daemon ausgeführt wird, der den ausgewählten Bildschirm erkennen muss) auf dem Bildschirm, auf dem sich die Maus befindet. Ich weiß, dass es mit libX11 möglich ist, weil ich es in der Vergangenheit gemacht habe, aber ich muss mit Qt 5 arbeiten, und ich kann nicht herausfinden, wie man den ausgewählten Bildschirm mit Qt.

Ich habe auch andere Tests gemacht, mit QApplication und QDesktopWidget Klassen ohne Glück.

    
armitage 16.08.2015, 21:39
quelle

4 Antworten

3

Das ist wirklich komisch. Als Workaround können Sie dies versuchen:

%Vor%

Nun wissen Sie, in welchem ​​Bildschirm sich der Cursor befindet. Dann können Sie die Cursorposition innerhalb dieses Bildschirms finden:

%Vor%     
Rafael Monteiro 16.08.2015 22:48
quelle
2

Um herauszufinden, auf welchem ​​Bildschirm Sie sich befinden, können Sie durch QGuiApplication::screens() und iterieren Überprüfen Sie, ob der Cursor in die Geometrie des Bildschirms passt.

Hier ist ein komplexeres Beispiel für die Berechnung der nativen Cursorposition (beachten Sie die zusätzliche Arbeit, die für die Arbeit mit High DPI-Bildschirmen erforderlich ist):

%Vor%     
Lekensteyn 15.10.2016 00:46
quelle
0

Da es scheint, dass es nicht mit Qt gemacht werden kann (zumindest mit meiner Systemkonfiguration, und es scheint, dass auch in Windows) entschied ich mich, die libX11 zu verwenden, um diese Implementierung, die wie Charme funktioniert.

Es ist keine ideale Lösung, weil ich nur Qt verwenden wollte, aber es funktioniert.

    
armitage 17.08.2015 08:30
quelle
0

Das mag wie eine triviale Lösung erscheinen, aber auf meinem KDE funktioniert es (ich hatte ursprünglich die gleichen Probleme). Wenn Sie die lokalen Mauskoordinaten in Bezug auf ein Widget bestimmen möchten (dies wird in Gerätepixel und relativ zur oberen linken Ecke des Widgets, glaube ich), können Sie

verwenden %Vor%

d. Rufen Sie this->mapFromGlobal auf.

    
GPMueller 07.03.2017 16:26
quelle

Tags und Links