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:
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.
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.
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.
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.
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.
Tags und Links c++ qt keyboard-events event-handling