0

使用 PyQt4 (4.10.3) 和 Qt4 (4.8.5) 我有一个应用程序应该在按下 Shift 键时改变其外观。该代码在 Mac OSX 中完美运行:只要我按下 Shift 键,就会调用我的 keyPressEvent() 方法,并显示一个用于 Shift 的 keyPress 的事件。Ctl(mac 上的 Cmd)和 Alt(opt)相同。

相同的代码在 Linux 和 Windows 上失败,因为在这些平台上,修改键的按下事件似乎没有立即传递。我可以按 Shift 并且没有任何反应,但是当我释放Shift 键时,的 keyPressEvent() 和 keyReleaseEvent() 方法会立即按该顺序调用。或者,如果在按住 Shift 的同时按下像“X”这样的数据键,我的 keyPressEvent 会被调用两次,分别是 Shift 键,然后是具有 shift 修饰符状态的 Key_X。

我对如何获得任何修饰键的实时通知感到困惑。我尝试添加一个原始 event() 处理程序,并在任何事件上询问 QApplication.queryKeyboardModifiers。似乎即使是 QApplication 也不知道修改键被按下,直到它们被释放......?

4

1 回答 1

0

我相信这不是一个真正的问题。在 Parallels 下的虚拟机中进行测试时会出现这些症状。Parallels 有许多自己的特殊键快捷键,例如用于进入全屏模式的 control-command-F。

我所看到的与 Parallels Desktop “坐在”任何修改键上是一致的,直到确定我没有尝试使用它的特殊快捷方式之一。然后当它发现不是这种情况时,例如当我释放修改键或按下数据键时,它会说,好的,虚拟系统,这是给你的所有键盘事件。

于 2013-11-13T00:56:42.327 回答