qt - 检测Qt中的右移键

标签 qt keyboard qt5 shift

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

list of values for the Qt::Key enumKey_Shift (还有 Key_Kana_ShiftKey_Eisu_Shift 但它们似乎是用于日文键盘的)但我不知道如何区分正确的和左 shift 键,这甚至可能吗?

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

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

最佳答案

Qt 不为这些键提供可移植的名称。但是,它确实允许您访问特定于平台的 key 扫描码。这是通过 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
    }
}

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

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

关于qt - 检测Qt中的右移键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813630/

相关文章:

c++ - Qml - 在 C++ 类和由 QmlRegisterType 创建的类之间交换日期

c++ - 我可以更改 QT 中主应用程序的图标大小吗?

visual-studio-2015 - Visual Studio 2015 'Show potential fixes' 键盘快捷键

c++ - 如何修复 "QtCharts"库文件未找到/无法包含 <QtCharts>?

c++ - 在 Qt5 中实现基于单元格的小部件

qt - 使用 QT C++ 编写 Web 表单填充器/提交器

iphone - UISearchBar 键盘外观

matlab - 如何在 GUI 运行时拦截 Matlab 中的击键

c++ - WA_DeleteOnClose 删除所有成员?

c++ - RSS 提要阅读器。 QT。烦恼