我目前正在开发一种跨平台的虚拟键盘。在Linux中我能够做任何我想做的事,但在Windows中我遇到了阻止小部件获得键盘焦点的问题。
在linux中,使用窗口标志
Qt::X11BypassWindowManagerHint
小部件永远不会获得键盘输入,但当然,该标志在Windows上不起作用
是否有相当于该标志的东西或我可以使用的某种方法?
任何想法都将不胜感激
提前致谢
答案 0 :(得分:1)
我在Make a floating QDockWidget unfocusable中发布了类似问题的答案。在Win32上,您实际上没有完全绕过窗口管理器的选择,但是您应该能够通过拦截nativeEvent来处理WM_MOUSEACTIVATE来获得所需的大部分行为。
答案 1 :(得分:0)
我会试着忽略这个事件。我相信您需要忽略主应用程序窗口上的FocusIn
- 不确定实际事件,您可能需要对其进行原型设计。您可以通过安装事件过滤器或手动重新实现其中一个event
方法(可能是event
本身)来忽略事件。我不知道哪种方式是首选,但我首先尝试使用事件过滤器完成此任务:http://doc.trolltech.com/4.6/qobject.html#eventFilter
我从未尝试捕获键盘焦点事件,但我能够成功忽略QDialog
中的转义键以防止用户意外关闭窗口。我相信它应该是可能的。