【发布时间】:2012-05-31 15:46:02
【问题描述】:
我是 Qt 的新手,但我正在尝试在 Qt 应用程序中实现基本上相当于视频游戏式输入循环的东西(我知道这很疯狂,但看看你是否能提供帮助)。我需要准确的一对一事件处理按键和键释放,所有键,包括修饰符,无论你多么奇怪地敲击键盘。
当然,您对关键事件的主要访问是通过QKeyEvent。但是假设发生了以下情况:
- 用户按住Ctrl
- 用户按住向上
- 用户同时释放Ctrl和Up
据我所知,我从 Qt 得到的是:
- QKeyEvent 用于单独按下 Ctrl (
Qt::Key_Ctrl) - QKeyEvent 用于单独按下 Up (
Qt::Key_Up) - QKeyEvent 用于释放 Ctrl+Up,
key() == Qt::Key_Up和 Ctrl 位反映在修饰符更改中。
这可能并不完全准确,但这是我对问题调试过多导致的最佳猜测。无论如何,涉及修饰符时的关键释放事件难以置信不可靠。
最后的 Ctrl+Up 顺序是问题所在。现在,我知道我在e->modifiers() 中获得了修饰符状态,并且我在e->key() 中获得了按键。我可以做一些复杂的修改,尝试在内部记住修改器状态,以检测用户何时释放修改器。但随后,Qt 文档告诉我,说到e->modifiers():
这个函数不能总是被信任。例如,用户可以通过同时按下两个 Shift 键并释放其中一个来混淆它。
这正是我试图避免的情况。
在 Qt 中,有没有可靠的方法来跟踪一对一的按键按下和释放,包括普通键和修饰键?如果没有,您能得到的最接近的距离是多少?
编辑:我可以稍微改进一下。似乎如果你在 Mac 上按住 Cmd,按几个键(比如字母键),松开它们,然后松开 Cmd,你 t 获取字母键发布的发布事件。 我将尝试隔离一个小示例,看看这是否真的是一个 Qt 错误。
【问题讨论】:
标签: qt keyboard keyboard-events