Fangen von Qt-Änderungsschlüsselfreigaben

Ich bin ein Neuling in Qt, aber ich versuche zu implementieren, was im Grunde genommen einer Videospiel-ähnlichen Eingabeschleife in einer Qt-Anwendung entspricht (verrückt, ich weiß, aber sehen Sie, ob Sie helfen können). Ich benötige eine genaue Eins-zu-Eins-Ereignisbehandlung für das Drücken von Tastenund Tastenfreigaben für alle Tasten, einschließlich der Modifikatoren, egal wie komisch Sie die Tastatur akkordieren.

Ihr Hauptzugriff auf wichtige Ereignisse erfolgt natürlich überQKeyEvent. Angenommen, Folgendes passiert:

Benutzer drückt und hältStrgBenutzer drückt und hältObenBenutzerfreigabenStrg undOben gleichzeitig

Was ich von Qt bekomme, ist, soweit ich das beurteilen kann:

QKeyEvent zum Drücken vonStrg, von selbst (Qt::Key_Ctrl)QKeyEvent zum Drücken vonOben, von selbst (Qt::Key_Up)QKeyEvent zur Freigabe vonStrg + Nach obenmitkey() == Qt::Key_Up und das Strg-Bit spiegelt sich in einer Änderung des Modifikators wider.

Dies mag nicht genau sein, aber ich vermute nach bestem Wissen, was passiert, wenn das Problem viel zu häufig behoben wird. In jedem Fall der SchlüsselVeröffentlichung Ereignisse, an denen Modifikatoren beteiligt sind, sindunglaublich unzuverlässig.

Die Strg + Up-Sequenz dort am Ende ist das Problem. Jetzt weiß ich, dass ich den Modifikatorstatus bekommee->modifiers()und ich drücke die Tastee->key(). Ich könnte einige komplizierte Hacks durchführen und versuchen, den Modifikatorstatus intern zu speichern, um festzustellen, wann der Benutzer den Modifikator freigegeben hat. Aber dann informieren mich die Qt-Dokumentee->modifiers(), Das:

Diese Funktion ist nicht immer vertrauenswürdig. Der Benutzer kann es verwirren, indem er zum Beispiel beide Umschalttasten gleichzeitig drückt und eine davon loslässt.

Das ist genau der Fall, den ich versuchevermeiden.

Gibt es eine zuverlässige Möglichkeit, das Drücken und Loslassen von 1: 1-Tasten sowohl für normale Tasten als auch für Modifikatortasten in Qt zu verfolgen? Wenn nicht, wie weit ist es am nächsten?

BEARBEITEN: Ich kann das ein bisschen verfeinern. Es scheint, wenn Sie gedrückt haltenCmd Drücken Sie auf einem Mac einige Tasten (z. B. Buchstabentasten), lassen Sie sie los und lassen Sie sie dann losCmd, SieKeine Veröffentlichungsereignisse für die Briefschlüssel-Veröffentlichungen erhalten. Ich werde versuchen, ein kleines Beispiel zu isolieren und herauszufinden, ob dies tatsächlich ein Qt-Fehler ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage