PyQt4 MouseMove-Ereignis ohne MousePress

8

Ich muss fangen, wenn ein Benutzer die Maus über die GUI bewegt, aber nicht, wenn er die Maustaste gedrückt hält (was etwas anderes tun würde).

Ich kann keine bequeme Methode finden, dies zu tun, außer, um die Mausposition regelmäßig zu finden und sie auf ihre vorherige Position zu überprüfen ... Was würde saugen.

Das mouseMoveEvent wird nur aufgerufen, wenn die Maus bei gedrückter linker Maustaste bewegt wird, es sei denn, das Widget hat eine 'Mausverfolgung'. Maus-Tracking ist für mich keine Option, da sich die GUI beim Bewegen der Maus und Drücken der linken Maustaste unterschiedlich verhalten muss.

Gibt es dafür eingebaute Methoden? (oder irgendwelche cleveren Ideen?)

zB: Gibt es eine Möglichkeit zu überprüfen, ob die linke Maustaste gedrückt wird?
Oder ein "mouse hover" -Ereignis, das auf einen QRect (Koordinaten) angewendet werden kann?

Muchas gracias.

Windows 7 (32)
Python 2.7
PyQt4

    
Anti Earth 20.10.2011, 00:31
quelle

4 Antworten

10

Der einfachste Weg, dies zu tun, ist einen Ereignisfilter auf qApp zu installieren:

%Vor%     
ekhumoro 20.10.2011, 16:18
quelle
2

Es scheint, dass Sie missverstanden haben, was mouseTracking tut. Es bewirkt nur, dass mouseMoveEvent ausgelöst wird, sonst nichts. Mit anderen Worten, es ist genau das, was Sie brauchen.

Überprüfen Sie anhand der Schaltflächen () , ob eine Schaltfläche gedrückt wurde:

  

Für Mausbewegungsereignisse sind dies alle Tasten, die gedrückt werden.

    
Petr Viktorin 20.10.2011 00:44
quelle
1

Rufen Sie zuerst die Methode setMouseTracking (True) auf. Dann wird mouseMoveEvent ausgelöst, ohne dass eine Taste gedrückt wird.

    
HYRY 20.10.2011 00:41
quelle
1

Wie die Leute gesagt haben, scheint der richtige Ansatz darin zu bestehen, setMouseTracking (True) auf dem Widget aufzurufen. Was ich hinzufügen möchte ist, dass Sie, nachdem Sie dies getan haben, zwischen einer Mausbewegung und einer Mausbewegung wie folgt unterscheiden können:

%Vor%     
MarcTheSpark 26.03.2015 23:28
quelle