Prüfen Sie, ob eine Taste gedrückt mit Qt
Ich bin Herumspielen mit einigen Grafiken und implementierte ich die Kamera einfach die Bewegung mit den Pfeiltasten. Mein Erster Ansatz war zu überschreiben keyPressEvent
etwas wie das hier tun:
switch(key)
{
case up: MoveCameraForward(step); break;
case left: MoveCameraLeft(step); break;
...
}
Diese nicht funktioniert, wie ich es wünschen würde. Wenn ich drücken Sie und halten Sie, zum Beispiel, die weiterleiten-Taste, die Kamera bewegt sich vorwärts "Schritt" - Einheiten, dann hält für eine Weile und fährt dann Fort zu bewegen. Ich vermute, dass dies ist, wie das Ereignis wird generiert, um zu vermeiden, dass mehrere Ereignisse bei einem etwas langen Tastendruck.
So, ich muss eine Umfrage der Tastatur in meinem Paint()
routine. Ich habe nicht gefunden, wie es mit Qt. Ich dachte, dass eine map<Key, bool>
die aktualisiert werden sollen in keyPressEvent
und keyReleaseEvent
Umfrage, die Karte in Paint()
. Irgendwelche besseren Ideen? Vielen Dank für alle Erkenntnisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre zweite Methode ist das, was ich getan hätte, außer, dass ich verwenden würde, um eine kontinuierliche, periodische QTimer-Ereignis Abfragen der Tastatur gedrückt, anzeigen und rufen QWidget::Update () - Funktion, wenn notwendig, erlischt die display-widget statt. Bei nicht-Malerei-Operationen innerhalb der Paint() wird dringend abgeraten, für viele Gründe, aber ich weiß nicht, wie zu erklären, dass auch.
Dieser löst nicht das Allgemeine problem, festzustellen, welche Tasten gedrückt werden, aber wenn Sie nur auf der Suche nach Tastatur-Modifier (shift, Strg, alt, etc.), Sie können abrufen, die durch die statische
QApplication::keyboardModifiers()
undQApplication::queryKeyboardModifiers()
Methoden.Es gibt keine Qt-API für die überprüfung, ob eine Taste gedrückt ist oder nicht.
Sie können schreiben, separaten code für verschiedene Plattformen und fügen Sie ein wenig
#ifdef
Logik.Unter Windows können Sie
GetKeyState()
undGetKeyboardState()
beide deklariert inwindows.h
.Dies ist nicht geradlinig, bei der Verwendung von Qt, aber der Gluon-team gearbeitet hat, auf genau dieses problem (zusammen mit einem Haufen anderer). GluonInput löst das Problem, und ist verfügbar als Teil von Gluon: http://gluon.gamingfreedom.org/ ist Es auch ein schönes, Qt-ähnliche API, also, während es ist eine zusätzliche Abhängigkeit, sollte es möglich sein für Sie zu nutzen.