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还是相当的多哎