• 5257阅读
  • 3回复

[提问]QToolButton的FouseOut问题??? [复制链接]

上一主题 下一主题
离线piaoliushi
 

只看楼主 倒序阅读 楼主  发表于: 2012-07-07
— 本帖被 yfx2003 从 《C++ GUI Qt 4编程》(第2版)专栏 移动到本区(2012-07-12) —

一个ToolButton,连接toggled信号到一个fun(bool)槽,fun(bool)的功能是显示一个对话框(非模态)。
此时我需要:
1)再点击这个ToolButton隐藏对话框,这只需要判断fun(bool) 中传来的参数就可以做到;
2)点击任意地方只要ToolButton失去焦点就将对话框隐藏并且ToolButton的checked状态为false;
    我通过截获ToolButton的FocuseOut事件来处理,1),2)没办法同时满足,不知道怎么回事?
有哪位能帮我看看,非常感谢。
离线jdwx

只看该作者 1楼 发表于: 2012-07-07
第2项没法达到要求,对话框显示后,焦点移动到对话框,按钮失去焦点,对话框又消失了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线alexltr

只看该作者 2楼 发表于: 2012-07-07
个人觉得可以尝试安装事件过滤器。

另外可以参考QComboBox处理popup的实现方法。

Good luck!
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线piaoliushi

只看该作者 3楼 发表于: 2012-07-09
虽然处理的有点蹩脚,但最终还是 解决了,谢谢上面两位的指点。
具体如下:
1)给所要显示的对话框安装事件过滤器,截获focuseout事件。
2)当对话框显示的时候一定要setFocus,只有这样过滤器才能捕获到对话框的focuseout事件。
3)这一步就是困扰我的关键一步,因为当对话框显示出来的时候,点击任意地方toolbutton都可以取消check标志,对话框也可以正常hide,唯独不能点击toolbutton本身,因为此时当点击toolbutton的时候会将对话框的焦点移出,这样过滤器会捕获到该事件,然后将toolbutton的状态setChecked为true,此时事件继续传递,对话框将消失一下又显示出来,达不到我想要的目的。
解决办法是:在eventFilter中在setChecked为false之前判断鼠标是否位于toolbutton下方,如果是,则不做任何处理,就这样一切搞定了。
也希望有更好办法的朋友能告诉我,谢谢!
快速回复
限100 字节
 
上一个 下一个