Prüfe, ob ein Schlüssel mit Qt unterlegen ist

8

Ich spiele mit einigen Grafiken herum und habe einfache Kamerabewegungen mit den Pfeiltasten implementiert. Mein erster Ansatz war, keyPressEvent zu überschreiben, um so etwas zu tun:

%Vor%

Das funktioniert nicht so, wie ich es mir gewünscht hätte. Wenn ich zum Beispiel die Vorwärts-Taste drücke und halte, bewegt sich die Kamera schrittweise vorwärts, hält dann eine Weile an und fährt dann weiter. Ich vermute, dass so das Ereignis generiert wird, um bei einem kleinen Tastendruck mehrere Ereignisse zu vermeiden.

Also muss ich die Tastatur in meiner Paint() Routine abfragen. Ich habe nicht gefunden, wie man es mit Qt macht. Ich dachte daran, eine map<Key, bool> zu haben, die in keyPressEvent und keyReleaseEvent aktualisiert würde und diese Karte in Paint() abfragt. Irgendwelche besseren Ideen? Danke für alle Einsichten.

    
Armen Tsirunyan 12.09.2011, 22:13
quelle

4 Antworten

6
  

Also muss ich die Tastatur in meiner Paint () Routine abfragen. Ich habe nicht gefunden   wie man es mit Qt macht. Ich dachte an eine Karte, die würde   in keyPressEvent und keyReleaseEvent aktualisiert werden und diese Karte abfragen   Malen ().

Ihre zweite Methode ist, was ich getan hätte, außer dass ich ein fortlaufendes, periodisches QTimer-Ereignis verwenden würde, um die Tastatur-gedrückte Karte abzufragen und die QWidget :: Update () -Funktion aufzurufen, um das Anzeige-Widget stattdessen ungültig zu machen. Das Ausführen von Nicht-Malvorgängen in Paint () wird aus vielen Gründen dringend empfohlen, aber ich weiß nicht, wie ich das gut erklären soll.

    
ksming 13.09.2011, 07:24
quelle
4

Dies löst nicht das allgemeine Problem der Erkennung, welche Tasten gedrückt werden, aber wenn Sie nur nach Keyboard-Modifikatoren (shift, ctrl, alt usw.) suchen, können Sie dies über die statische QApplication::keyboardModifiers() und QApplication::queryKeyboardModifiers() Methoden.

    
Nathan 04.11.2014 17:39
quelle
3

Es gibt keine Qt-API, um zu prüfen, ob eine Taste gedrückt wurde oder nicht. Möglicherweise müssen Sie separaten Code für verschiedene Plattformen schreiben und ein bisschen #ifdef logic hinzufügen.

Unter Windows können Sie GetKeyState() und GetKeyboardState() verwenden, beide in windows.h deklariert.

    
user763305 13.09.2011 10:45
quelle
2

Dies ist nicht direkt bei der Verwendung von Qt, aber das Gluon-Team hat genau an diesem Problem gearbeitet (zusammen mit einigen anderen). GluonInput löst das Problem und ist als Teil von Gluon verfügbar: Ссылка Es ist auch eine nette, Qt-ähnliche API, obwohl es eine ist zusätzliche Abhängigkeit, sollte es Ihnen möglich sein, es zu verwenden.

    
leinir 12.09.2011 22:31
quelle