qt - 死键不会到达 keyPressedEvent()

标签 qt event-handling keyboard

我正在为一个程序使用 Qt 4.3.1(我现在无法升级),无论如何在 Windows 中死键(^、´、`、...)不会到达 keyPressedEvent (),我总是要按两次。

那么为什么那些死 key 还没有到达呢?我该如何解决?

不过在 MacOS 中一切正常。

谢谢,eL。

最佳答案

查看 Qt 文档后,我不确定 keyPressEvent 是否应该传送死键。我真的有点惊讶你在 Mac 上看到它们。

我猜 Qt 在为您的小部件发送 keyPressEvent 之前选择等待 WM_CHAR 事件或其他事件。从这个页面可以看到:http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx#_win32_Dead_Character_Messages当用户按下一个死键然后再按下一个实键时,按键事件的顺序是:

WM_KEYDOWN
WM_DEADCHAR
WM_KEYUP
WM_KEYDOWN
WM_CHAR
WM_KEYUP

如果您真的想捕获死字符按键,请查看子类化 QApplication 并覆盖 winEventFilter ( http://doc.qt.io/qt-4.8/qcoreapplication.html#winEventFilter) 方法。这将使您能够在 WM_DEADCHAR 事件进入时捕获它们。然后您可以创建一个 KeyEvent 并将其分派(dispatch)给当前具有焦点的小部件。

关于qt - 死键不会到达 keyPressedEvent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872085/

相关文章:

windows - 关闭 F 锁的功能键的键码?

python - 如何从 Qtable 获取值

android - Android 的 Qt 缺少编译器

c++ - QT 串行丢弃数据

c++ - Qt Windows 部署 : Application does not start

java - 使用 Spring XML 配置实现观察者模式?

WPF 自定义控件生命周期图?

javascript - React JS - 这个函数如何删除 JSON 数据?

java - Java中如何让每次按回车键时弹出一个新文本?

objective-c - 设置键盘类型不会影响键盘。怎么了?