Qt LEFT CTRL Key Code

В Qt's QKeyEvent Я могу проверить, был ли нажат Ctrl, проверив, ev->key() является Qt::Key_Control, Но как я могу различить левую и правую клавиши Ctrl?

Мне также нужно то же самое для клавиш Alt и Shift.

4 ответа

Решение

Там нет никакого способа сделать это, используя чистый Qt методы, насколько я знаю.

Однако, в зависимости от вашей платформы, вы можете различать ключи, используя QKeyEvent::nativeScanCode() метод вместо QKeyEvent::key(),

Например, в Windows вы сможете проверить, какая клавиша Ctrl была нажата следующим образом:

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

Левая и правая клавиши являются частью кода виртуальной клавиши -> используйте nativeVirtualKey() для сравнения с перечислениями Windows VK_* вместо nativescancode().

Согласно справочнику пространства имен Qt, enum Qt::Key имеет другое значение для Qt::Key_Alt а также Qt::Key_AltGr,

Тем не мение, enum Qt::KeyboardModifier а также enum Qt::Modifier не вижу пару ключей как разные модификаторы.

(примечание: я бы опубликовал это как комментарий, но мне пока не хватает представителя)

Если VK_RCONTROL не работает, проверьте значение nativeCanCode ctrl-right:

станд:: соиЬ

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

Другие вопросы по тегам