QT使用QHotKey实现全局热键时会发现,大键盘的小键盘的键位没有办法通过QT::Key()和QT::modifiers()直接处理,通过调试和查看QHotKey发现,在windows可以通过虚拟键码解决,在QHotKey的源码要加上以下处理;
QHotKey:
qhotkey_win.cpp:
quint32 QHotkeyPrivateWin::nativeKeycode(Qt::Key keycode, bool &ok)
{
ok = true;
switch (keycode)
{
case VK_NUMPAD0:
case VK_NUMPAD1:
case VK_NUMPAD2:
case VK_NUMPAD3:
case VK_NUMPAD4:
case VK_NUMPAD5:
case VK_NUMPAD6:
case VK_NUMPAD7:
case VK_NUMPAD8:
case VK_NUMPAD9:
case VK_MULTIPLY:
case VK_ADD:
case VK_SEPARATOR:
case VK_SUBTRACT:
case VK_DECIMAL:
case VK_DIVIDE:
return keycode;
default:
break;
}
if(keycode <= 0xFFFF) {//Try to obtain the key from it's "character"
const SHORT vKey = VkKeyScanW(static_cast<WCHAR>(keycode));
if(vKey > -1)
return LOBYTE(vKey);
}
...//其它源码