linux - 如何避免修改键按下的延迟通知,Qt for Linux 和 Windows?

标签 linux macos qt qt4 pyqt4

使用 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/

相关文章:

linux - awk'BEGIN {sum = 0} END {print sum}'文件名的输出是什么?

c - 如何将指向结构的指针数组初始化为零

c - if_nametoindex 的实现

c++ - Mac OS X : is it possible to imbue a non-main thread to become "The Main Thread" of a process?

c++ - Qt:将 QPixmap 保存到 std::vector<unsigned char> - 或将 QByteArray 转换为 std::vector<unsigned char>

java - 在 Windows 中绘制缓冲图像速度慢,在 Linux 中速度快

linux - 如何在没有 “./” 的情况下运行 bash 文件,MAC OS?

linux - Bash - 错误信息 'Syntax error: "("unexpected'

c++ - 我如何使用 cmake(和 visual studio)为 qt designer 创建自定义(小部件)插件

c++ - QObject::deleteLater 跨 QThread