В Qt QKeyEvent
я могу проверить, был ли нажат Ctrl, проверив, является ли ev->key()
Qt::Key_Control
. Но как мне различить левую и правую клавиши Ctrl?
Мне также нужно то же самое для клавиш Alt и Shift.
В Qt QKeyEvent
я могу проверить, был ли нажат Ctrl, проверив, является ли ev->key()
Qt::Key_Control
. Но как мне различить левую и правую клавиши Ctrl?
Мне также нужно то же самое для клавиш Alt и Shift.
Насколько я знаю, это невозможно сделать с помощью чистых методов Qt
.
Однако в зависимости от вашей платформы вы можете различать ключи с помощью QKeyEvent::nativeScanCode()
вместо QKeyEvent::key()
.
Например, в Windows вы сможете проверить, какая клавиша Ctrl была нажата, следующим образом:
if (event->nativeScanCode() == VK_LCONTROL) {
// left control pressed
} else if (event->nativeScanCode() == VK_RCONTROL) {
// right control pressed
}
nativeScanCode()
должен возвращаться в соответствии с msdn.microsoft.com/en-us/ library/ms927178.aspx Что, вероятно, не так. Поэтому я думаю, что мне нужно различать обычные буквы/цифры и клавиши управления. но какова общая функция, которая сообщает, что это буквенно-цифровая клавиша, а это клавиша ALT/SHIFT/CTRL/BACK/.....?
- person Dipro Sen; 01.07.2012
VK_LCONTROL
и т. д.
- person houbysoft; 01.07.2012
Согласно справочнику по пространству имен Qt, enum Qt::Key
имеет другое значение для Qt::Key_Alt
и Qt::Key_AltGr
.
Однако enum Qt::KeyboardModifier
и enum Qt::Modifier
не рассматривают пару ключей как разные модификаторы.
(примечание: я бы опубликовал это как комментарий, но у меня пока недостаточно представителей)
Левая и правая клавиши являются частью кода виртуальной клавиши -> используйте nativeVirtualKey()
для сравнения с перечислениями окон VK_*
вместо nativescancode()
.
Если VK_RCONTROL
не работает, проверьте значение nativeScanCode ctrl-right:
std::cout<<keyEvent->nativeScanCode();
и используйте это значение:
int control_right = 285;
if(key->nativeScanCode() == control_right){...