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){...