2012-07-01 9 views
6

W Qt QKeyEvent mogę sprawdzić czy Ctrl został naciśnięty przez sprawdzenie czy ev->key() jest Qt::Key_Control. Ale jak odróżnić lewe i prawe klawisze?Qt LEFT CTRL klucz kod

muszę również samo dla Alt i SHIFT kluczy.

+1

Dlaczego chcesz? To byłby koszmar użyteczności. Dla użytkownika klucze są takie same i używasz ich na podstawie tego, który z nich znajduje się bliżej najbliższego palca w danym momencie. Takie rzeczy mają sens jedynie w grach. Czy to jest gra? –

+1

@KubaOber Jednym z przypadków użycia są skróty klawiaturowe. Na przykład Lewy Alt + Shift zmienia klawiaturę w systemie Windows. Rozróżnienie jest ważne. –

+0

@ Andrew-Dufresne Jak to jest ważne? System operacyjny obsługuje skrót przełączania klawiatury, aplikacja nie może nic z tym zrobić. Po prostu otrzyma prawy Alt, nigdy go nie opuści. Możliwość rozróżnienia tych dwóch nie zmieni zachowania, więc nie ma sensu. –

Odpowiedz

3

Nie można tego zrobić, używając czystych metod Qt, o ile wiem.

W zależności od platformy może być jednak możliwe rozróżnienie kluczy przy użyciu metody QKeyEvent::nativeScanCode() zamiast QKeyEvent::key().

Na przykład w systemie Windows należy być w stanie przetestować który Ctrl klawisz został naciśnięty w następujący sposób:

if (event->nativeScanCode() == VK_LCONTROL) { 
    // left control pressed 
} else if (event->nativeScanCode() == VK_RCONTROL) { 
    // right control pressed 
} 
+0

Tak więc w Windows 'nativeScanCode()' powinien powrócić zgodnie z http://msdn.microsoft.com/en-us/library/ms927178.aspx Który prawdopodobnie to nie robi. Myślę więc, że muszę rozróżnić normalną alfę/cyfry i klawisze kontrolne. ale jaka jest ogólna funkcja, która mówi, że jest to klucz alfanumeryczny i jest to klawisz ALT/SHIFT/CTRL/BACK/.....? –

+0

@DiproSen: Po prostu spróbuj przetestować przed 'VK_LCONTROL' itd. – houbysoft

+0

naprawdę? czy to takie proste? Siedziałem bezczynnie myśląc, czy to zadziała, czy nie. Czy jednak źle traktować klawisze w lewo/w prawo jako takie same? –

1

lewo iw prawo są częścią kodu klucza wirtualnego -> użyj nativeVirtualKey(), aby porównać z oknami VK_ * wylicza zamiast nativescancode().

1

Zgodnie z Qt Namespace Reference, enum Qt::Key ma inną wartość dla Qt::Key_Alt i Qt::Key_AltGr.

Jednak enum Qt::KeyboardModifier i enum Qt::Modifier nie widzą pary kluczy jako różnych modyfikatorów.

(uwaga: Ja bym pisał to jako komentarz, ale nie mam wystarczająco dużo jeszcze rep.)

0

Jeśli VK_RCONTROL nie działa, sprawdź swoją wartość nativeScanCode Ctrl-prawo:

std :: cout < nativeScanCode(); i użyj tej wartości:

int control_right = 285; if (key-> nativeScanCode() == control_right) {...