6

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

我也需要AltShift钥匙一样的东西。

4

4 回答 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
}
于 2012-07-01T15:37:39.627 回答
1

左右键是虚拟键代码的一部分 -> 用于nativeVirtualKey()与 windowsVK_*枚举而不是nativescancode().

于 2014-01-21T18:25:28.700 回答
1

根据Qt 命名空间参考, 和具有enum Qt::Key不同的值。Qt::Key_AltQt::Key_AltGr

但是,enum Qt::KeyboardModifier不要enum Qt::Modifier将这对键视为不同的修饰符。

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

于 2014-06-06T08:47:38.330 回答
0

如果VK_RCONTROL不起作用,请检查您的 nativeScanCode 值ctrl- right

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

int control_right = 285;
if(key->nativeScanCode() == control_right){...
于 2017-04-15T15:43:59.710 回答