如何区分左右修饰键

问题描述 投票:0回答:4

在Qt的

QKeyEvent
中,我可以通过检查ev->key()是否为
Qt::Key_Control
来检查
Ctrl
是否被按下,但是如何区分左右Ctrl键?

我还需要同样的 AltShift 键。

c++ qt events keyboard-events ctrl
4个回答
3
投票

据我所知,使用纯

Qt
方法无法做到这一点。

但是,根据您的平台,您也许可以使用

QKeyEvent::nativeScanCode()
方法而不是
QKeyEvent::key()
来区分按键。

例如,在 Windows 上,您应该能够测试按下了哪个 Ctrl 键,如下所示:

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

1
投票

根据 Qt 命名空间参考

enum Qt::Key
对于
Qt::Key_Alt
Qt::Key_AltGr
具有不同的值。

但是,

enum Qt::KeyboardModifier
enum Qt::Modifier
不会将这对键视为不同的修饰符。

(注:我本想将此作为评论发布,但我还没有足够的代表。)


1
投票

左键和右键是虚拟键代码的一部分 -> 使用

nativeVirtualKey()
与 Windows
VK_*
枚举进行比较,而不是
nativescancode()


0
投票

如果

VK_RCONTROL
不起作用,请检查ctrl-right的nativeScanCode值:

std::cout<<keyEvent->nativeScanCode();
并使用此值:

int control_right = 285;
if(key->nativeScanCode() == control_right){...
© www.soinside.com 2019 - 2024. All rights reserved.