是否可以仅在Qt中捕获右移键?
在list of values for the Qt::Key enum Key_Shift
{Key_Kana_Shift
和Key_Eisu_Shift
,但它们似乎适用于日语键盘,但我不知道如何区分右移键和左移键,这有可能吗?
我想找到适用于主要平台(GNU / Linux,Windows,MacOS)的解决方案
感谢您的帮助和亲切的问候, 托德
答案 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来获取代码。