Qt focusoutevent 不响应的解决方法

一般利用focus(焦点)来实现弹窗自动关闭效果. 

Qt的focus貌似是自己的bug, 经常无法接收到focusout的事件

例如: widgetA 中执行  widgetB->show(); widgetB->setfocus(...); 后 点击widgetA 中的edit控件则widgetB会接收一个focusoutevent, 但是如果点击的是WdigetA中的button, 则WidgetB毫无反应,  这是不正常的

 

解决方法:

windows平台上, 重载nativeEvent(Qt5)或者winEvent(Qt4) 处理WM_KILLFOCUS消息

注意: nativeEvent 或winEvent应该是独立窗口才会被调用

 

另外试了挺久的, 还有个方法: 

widgetB->show(); widgetB->activateWindow(); widgetB->setfocus(...);

添加这句widgetB->activateWindow(); 也可解决问题

Qt文档中对activateWindow的解释: An active window is a visible top-level window that has the keyboard input focus.

 

ps: Qt5.1性能提升了不少, 也改进了很多bug, 还是不错的, 不过Qt的bug还是相当的多哎

 

posted on 2013-10-26 23:12  一 水  阅读(3903)  评论(0编辑  收藏  举报

导航