2012-07-01 10 views
6

En Qt de QKeyEvent puedo comprobar si Ctrl fue presionado comprobando si ev->key() es Qt::Key_Control. ¿Pero cómo puedo distinguir entre las teclas Ctrl izquierda y derecha Ctrl?Qt IZQUIERDA CTRL Código dominante

que también necesitan la misma cosa para Alt y Shift llaves.

+1

¿Por qué lo necesitarías? Sería una pesadilla de usabilidad. Para el usuario, esas claves son las mismas, y las usa según el que esté más cerca del dedo más cercano, en ese momento. Tales cosas solo tienen sentido para los juegos. Es esto un juego? –

+1

@KubaOber Un caso de uso son los atajos de teclado. Por ejemplo, izquierda Alt + Shift cambia el teclado en Windows. Aquí la distinción es importante. –

+0

@ Andrew-Dufresne ¿Cómo es eso tan importante? El SO maneja el atajo de conmutación de teclado, la aplicación no puede hacer nada al respecto. Simplemente recibirá la Alt derecha, nunca abandonó una. Tenerlo capaz de distinguir los dos no cambiará el comportamiento, por lo que no tiene sentido. –

Respuesta

3

No hay forma de hacerlo usando métodos puros Qt, hasta donde yo sé.

Dependiendo de su plataforma, sin embargo, es posible que pueda distinguir entre las claves utilizando el método QKeyEvent::nativeScanCode() en lugar de QKeyEvent::key().

Por ejemplo, en Windows debe ser capaz de probar lo que Ctrl clave se ha pulsado la siguiente manera:

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

Por lo tanto, en Windows 'nativeScanCode()' debe regresar según http://msdn.microsoft.com/en-us/library/ms927178.aspx que probablemente no está funcionando. Así que creo que necesito distinguir entre alfa/números normales y teclas de control. ¿Cuál es la función genérica que dice que esto es una clave alfanumérica y esta es una tecla ALT/MAYÚS/CTRL/ATRÁS/.....? –

+0

@DiproSen: Solo prueba probando 'VK_LCONTROL', etc. – houbysoft

+0

realmente? es así de fácil? Estaba sentado sin hacer nada pensando si funcionaría o no. Sin embargo, ¿es malo tratar las teclas izquierda/derecha como lo mismo? –

1

teclas izquierda y derecha son parte del código de tecla virtual -> usar nativeVirtualKey() para comparar con Windows VK_ * enums en lugar de nativescancode().

1

De acuerdo con Qt Namespace Reference, el enum Qt::Key tiene un valor diferente para Qt::Key_Alt y Qt::Key_AltGr.

Sin embargo, enum Qt::KeyboardModifier y enum Qt::Modifier no ven el par de teclas como modificadores diferentes.

(nota: Me hubiera publicado esto como un comentario, pero no tengo representante suficiente todavía.)

0

Si vk_rcontrol no funciona, compruebe su valor nativeScanCode de ctrl-derecha:

std :: cout < nativeScanCode(); y use este valor:

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

Cuestiones relacionadas