Windows上的Qt :: X11BypassWindowManagerHint功能

时间:2010-03-12 19:18:45

标签: windows windows-xp qt4 widget

我目前正在开发一种跨平台的虚拟键盘。在Linux中我能够做任何我想做的事,但在Windows中我遇到了阻止小部件获得键盘焦点的问题。

在linux中,使用窗口标志

Qt::X11BypassWindowManagerHint

小部件永远不会获得键盘输入,但当然,该标志在Windows上不起作用

是否有相当于该标志的东西或我可以使用的某种方法?

任何想法都将不胜感激

提前致谢

2 个答案:

答案 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中的转义键以防止用户意外关闭窗口。我相信它应该是可能的。