【问题标题】:Qt LEFT CTRL Key CodeQt LEFT CTRL 键码
【发布时间】:2012-07-01 15:32:01
【问题描述】:

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

AltShift 键也需要同样的功能。

【问题讨论】:

  • 您为什么需要这样做?这将是一个可用性噩梦。对于用户来说,这些键是相同的,您可以根据当时离您最近的手指更近的那个键来使用它们。这样的事情只对游戏有意义。这是游戏吗?
  • @KubaOber 一个用例是键盘快捷键。例如 Left Alt+Shift 在 Windows 上更改键盘。这里的区别很重要。
  • @Andrew-Dufresne 这有多重要?操作系统处理键盘切换快捷键,应用程序对此无能为力。它只会收到右 Alt,永远不会离开。让它能够区分两者不会改变行为,所以没有意义。
  • @KubaOber 我正在使用 Qt 开发一个远程桌面应用程序。假设用户从本地 Windows 机器连接到远程 Windows 机器。他想在远程机器上切换键盘,使用键盘快捷键左 Alt+Shift。现在我的应用程序应该区分 Alt 和 Left Alt,以便远程端接收 Left Alt 而不仅仅是 Alt 键。这是一个区分很重要的用例。

标签: c++ qt events keyboard-events ctrl


【解决方案1】:

据我所知,使用纯 Qt 方法无法做到这一点。

但是,根据您的平台,您可能能够使用QKeyEvent::nativeScanCode() 方法而不是QKeyEvent::key() 来区分键。

例如,在 Windows 上,您应该能够测试按下了哪个 Ctrl 键,如下所示:

if (event->nativeScanCode() == VK_LCONTROL) {
  // left control pressed
} else if (event->nativeScanCode() == VK_RCONTROL) {
  // right control pressed
}

【讨论】:

  • 所以在 Windows 中 nativeScanCode() 应该按照 msdn.microsoft.com/en-us/library/ms927178.aspx 返回,这可能不是它做的。所以我想我需要区分普通的字母/数字和控制键。但是什么通用函数告诉这是一个字母/数字键,这是一个 ALT/SHIFT/CTRL/BACK/..... 键?
  • @DiproSen:尝试针对VK_LCONTROL 等进行测试。
  • 真的吗?有那么容易吗?我只是坐着闲着想它是否会起作用。但是,将左右键视为相同是不是很糟糕?
  • @DiproSen:我还没有测试过,但我相信它应该可以工作。而wdym,将左/右键视为相同是不是很糟糕?它没有任何问题,只是取决于您在应用程序中需要什么......
【解决方案2】:

根据Qt Namespace Referenceenum Qt::KeyQt::Key_AltQt::Key_AltGr 具有不同的值。

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

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

【讨论】:

    【解决方案3】:

    左右键是虚拟键代码的一部分 -> 使用 nativeVirtualKey() 与 windows VK_* 枚举而不是 nativescancode() 进行比较。

    【讨论】:

      【解决方案4】:

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

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

      int control_right = 285;
      if(key->nativeScanCode() == control_right){...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多