检测Qt中的右移键

Detecting the right shift key in Qt

是否只能在Qt中捕获右shift键?

list of values for the Qt::Key enum里面有Key_Shift(还有Key_Kana_ShiftKey_Eisu_Shift但是好像是日文键盘)但是我不知道怎么区分左右shift键,这样可以吗?

我想找到适用于主要平台(GNU/Linux、Windows、MacOS)的解决方案

感谢您的帮助和亲切的问候, 托德

如果您在 Windows OS 上编码,那么您可以使用 nativeVirtualKey() const 类型。 Windows 为按下的各个键提供标识符,包括左移键和右移键(分别为 VK_LSHIFT 和 VK_RSHIFT)https://msdn.microsoft.com/en-us/library/ms927178.aspx。通过类似于此访问按键事件的虚拟键:

if (event->nativeVirtualKey() == VK_LSHIFT) {
// left shift specific code
} else if (event->nativeVirtualKey() == VK_RSHIFT) {
// right shift specific code
}

Qt 不为这些键提供可移植的名称。但是,它确实允许您访问特定于平台的密钥扫描码。这是通过 QKeyEvent::nativeScanCode() 完成的。在你的 QWidget::keyPressEvent() 函数中,添加一些临时代码来打印你按下的键的扫描码:

#include <QDebug>
#include <QKeyEvent>
void YourWidgetClass::keyPressEvent(QKeyEvent *event)
{
    qDebug() << event->nativeScanCode();
    event->accept();
}

现在 运行 您的程序并按下 shift 键。在我的系统 (Linux/X11) 上,左移的代码为 50,右移的代码为 62。这意味着您可以检查那些:

void YourWidgetClass::keyPressEvent(QKeyEvent *event)
{
    switch (event.nativeScanCode()) {
    case 50: // left shift
    case 62: // right shift
    }
}

这些代码在所有 Linux 系统上都是相同的 运行ning 在 X11 中使用 XCB。它们在其他 Linux 系统上可能不同(比如那些 运行ning Wayland 而不是 X11。)它们在 Windows 上也不同,尽管所有 Windows 版本都使用(AFAIK ) 相同的代码。您可以 Google 了解扫描代码在 Windows 上的内容。请注意,扫描代码通常以十六进制记录,因此当您看到“30”时,您应该在代码中使用“0x30”。

但是您不能在 Mac OS 上执行此操作。在 Mac OS 上,您需要使用非 Qt API 来获取代码。