使用 PyQt4 (4.10.3) 和 Qt4 (4.8.5) 我有一个应用程序,当按下 Shift 键时应该改变其外观。该代码在 Mac OSX 中完美运行:只要我按下 Shift 键,我的 keyPressEvent() 方法就会被调用,并显示一个显示 Shift 键按下的事件。 Ctl(Mac 上的 Cmd)和 Alt (opt) 也是如此。
相同的代码在 Linux 和 Windows 上失败,因为在这些平台上,修饰键的按下事件似乎没有立即传递。我可以按 Shift 键但什么也不会发生,但是当我释放 Shift 键时,然后我的 keyPressEvent() 和 keyReleaseEvent() 方法会立即按该顺序调用。或者,如果在按住 Shift 的同时按下“X”等数据键,我的 keyPressEvent 会被调用两次,一次是针对 Shift 键,另一次是针对具有 Shift 修饰符状态的 Key_X。
我对如何获取任何修饰键的实时通知感到困惑。我尝试的方法是添加一个原始 event() 处理程序,并在任何事件上询问 QApplication.queryKeyboardModifiers。看来即使 QApplication 也不知道按下的修饰键,直到它们被释放......?
最佳答案
我相信这不是一个真正的问题。这些症状是在 Parallels 下的虚拟机中进行测试时出现的。 Parallels 有许多自己的特殊快捷键,例如用于进入全屏模式的 control-command-F。
我所看到的情况与 Parallels Desktop“坐在”任何修饰键上一致,直到确定我没有尝试使用其特殊快捷方式之一。然后,当它发现情况并非如此时,例如当我释放修饰键或按下数据键时,它会说,好吧,虚拟系统,这是您的所有键盘事件。
关于linux - 如何避免修改键按下的延迟通知,Qt for Linux 和 Windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939608/