在Qt

时间:2017-06-28 22:39:05

标签: qt keyboard qt5 shift

是否可以仅在Qt中捕获右移键?

list of values for the Qt::Key enum Key_Shift {Key_Kana_ShiftKey_Eisu_Shift,但它们似乎适用于日语键盘,但我不知道如何区分右移键和左移键,这有可能吗?

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

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

2 个答案:

答案 0 :(得分:1)

如果您在Windows操作系统上编码,则可以使用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
}

答案 1 :(得分:1)

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
    }
}

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

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