在Qt的
QKeyEvent
中,我可以通过检查ev->key()
是否为Qt::Key_Control
来检查Ctrl是否被按下,但是如何区分左右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
}
根据 Qt 命名空间参考,
enum Qt::Key
对于 Qt::Key_Alt
和 Qt::Key_AltGr
具有不同的值。
但是,
enum Qt::KeyboardModifier
和enum Qt::Modifier
不会将这对键视为不同的修饰符。
(注:我本想将此作为评论发布,但我还没有足够的代表。)
左键和右键是虚拟键代码的一部分 -> 使用
nativeVirtualKey()
与 Windows VK_*
枚举进行比较,而不是 nativescancode()
。
如果
VK_RCONTROL
不起作用,请检查ctrl-right的nativeScanCode值:
std::cout<<keyEvent->nativeScanCode();
并使用此值:
int control_right = 285;
if(key->nativeScanCode() == control_right){...