QKeySequence zu QKeyEvent

8

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:

%Vor%     
Chris Robinson 30.04.2012, 12:05
quelle

3 Antworten

4

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.

    
Jeff 18.12.2013 11:09
quelle
3

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 :

schreiben %Vor%

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.

    
Ferdinand Beyer 30.04.2012 15:34
quelle
0

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 verwenden

Auch 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.

    
bootchk 12.09.2013 14:51
quelle

Tags und Links