Ich bin in einer Situation, in der ich versuche, in einer JSON-Konfigurationsdatei zu lesen, die angibt, welche Tastenbefehle bestimmten Aktionen zugeordnet sind. Zum Beispiel:
%Vor% Das Konstruieren von QKeySequence
aus dem Combo-Tag ist trivial, aber ich muss QKeyEvent
s überwachen, um Aktionen auszulösen. Bitte beachten Sie, dass verwendet werden muss, um QKeyEvent
s zu überwachen, da sie auch für andere Zwecke in der Anwendung verwendet werden. d. h. es wäre nicht akzeptabel, nur Tastaturbefehle für QKeySequence
s zu überwachen (falls das überhaupt möglich ist).
Kurz vor dem Schreiben eines benutzerdefinierten Parsers, um ein QKeyEvent
-Objekt für jedes "Combo"
-Tag zu erstellen, gibt es trotzdem einen Vergleich zwischen QkeyEvent
und QKeySequence
? Zum Beispiel:
Eine einfache Lösung (in Python geschrieben):
%Vor%Gibt Ihnen die gesamte Sequenz in Form einer Zeichenfolge, z. B. "Strg + Q".
Die Vorteile sind (zumindest in Python), die Sie in einem Diktat der Verknüpfungen finden können, während eine QKeySequence nicht hashbar gewesen wäre.
Achten Sie darauf, dass Sie den richtigen Typcase und Abstand verwenden. "Strg + Q" wird nicht übereinstimmen. Um alle Probleme zu vermeiden, können Sie beim ersten Lesen der Tastenkombinationen Folgendes tun:
%Vor%und suchen / finden mit
%Vor%oder besser noch:
%Vor%und passen Sie direkt an.
Im Allgemeinen können Sie die Objekte QKeyEvent
und QKeySequence
nicht vergleichen. QKeyEvent
stellt das Ereignis dar, dass eine einzelne -Taste gedrückt oder losgelassen wird, während QKeySequence
eine Folge von bis zu vier Schlüsseln mit jeweils optionalen Modifikatorinformationen enthalten kann.
Sie können die Objekte jedoch vergleichen, wenn Sie sicher sind, dass Ihre Schlüsselfolgen immer nur einen Schlüssel enthalten:
%Vor% Sie können sogar eine Konvertierungsfunktion für QKeyEvent
in QKeySequence
:
Beachten Sie, dass es nicht sinnvoll ist, ein QKeySequence
in ein QKeyEvent
zu konvertieren, da Sie einen bestimmten Ereignistyp wie QEvent::KeyPress
oder QEvent::KeyRelease
auswählen müssen.
Eine Qt4.7-Notiz mit Code zum Konvertieren von KeyEvent in KeySequence. (Aber der Code ist fehlerhaft, weil es einen int für den Schlüsselcode von QKeyEvent.key () in eine Zeichenfolge umsetzt. Besser QKeyEvent.text ()?)
zu verwendenAuch der Code in Ferdinands Antwort:
%Vor%ist nicht typsicher (mischt int und QKeyboardModifiers) und wenn es in Python konvertiert wird, schlägt es in PyQt fehl, aber nicht in PySide?
Auch "QKeyEvent stellt das Ereignis eines einzelnen Tastendrucks oder -auslösers dar" erklärt es nicht wirklich. Ein QKeyEvent kann Ihnen sagen, welche Tastenkombination nicht gedrückt wurde, nur nicht die Reihenfolge, in der sie gedrückt wurden. Wenn der Benutzer Tasten nacheinander drückt, erhält Ihre App möglicherweise eine Folge von QKeyEvents (abhängig davon, ob Ihre Anwendung für QKeyEvent standardmäßige oder überschriebene Handler verwendet.) Die späteren QKeyEvents zeigen Ihnen alle zum Zeitpunkt des Ereignisses ausgefallenen Schlüssel an . Sie könnten nicht mehr unten sein. Es ist ziemlich kompliziert.
Tags und Links c++ qt key-events qkeysequence