请教当子控件获得焦点时,如何使主窗口获得按键点击消息?

YouNeverCanTell 2014-08-07 09:56:15
现在用Qt开发一款软件的界面,软件的主界面是一个继承于MainWindow的窗口,上面有一些按钮,点击按钮会弹出一些子控件Dialog,这些Dialog是用QtDesigner绘制的。
现在我想做当该软件30s内没接收到任何按键或者鼠标点击消息的时候就锁定这个软件,但是当弹出这些Dialog的时候,主窗口就接收不到任何点击和按键消息了。想在弹出的Dialog上做一些热键响应也没法做。
不知道是不是需要子控件做事件过滤,但是QtDesigner绘制时没看到有做事件过滤的地方,而且那么多子控件,大约40多个吧,每个都做得话工作量太大了。求教有没有好的解决方法?
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
king1076 2014-08-08
  • 打赏
  • 举报
回复
installEventFilter
dbzhang800 2014-08-07
  • 打赏
  • 举报
回复
1. 在一个Qt程序中,QApplication 对所有类都是可见的! 2. 退一步讲,在C++程序中,即使一个类对象对其他类不可见,你也应该有办法使其可见吧?
YouNeverCanTell 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 dbzhang800 的回复:
[quote=引用 2 楼 YouNeverCanTell 的回复:] [quote=引用 1 楼 dbzhang800 的回复:] 直接给你的QApplication安装一个事件过滤器即可
有想过,但是我的主窗口不是在main里new的,因为先要在main里new一个登录界面,登录成功后直接在登录类里new出来的主界面。可能更好的设计是登录界面和主界面都在main里new,但是我做不到把登录界面中的登录成功的socket消息发到main。。第一次用Qt,很多不知道的地方[/quote] 这个和你安装事件过滤器有什么关系么? 在任何一个控件内的任何时候都可以给qApp安装事件过滤器[/quote] 你说的不是main里的那个QApplication吗?它不是在其他类里不可见吗
dbzhang800 2014-08-07
  • 打赏
  • 举报
回复
引用 2 楼 YouNeverCanTell 的回复:
[quote=引用 1 楼 dbzhang800 的回复:] 直接给你的QApplication安装一个事件过滤器即可
有想过,但是我的主窗口不是在main里new的,因为先要在main里new一个登录界面,登录成功后直接在登录类里new出来的主界面。可能更好的设计是登录界面和主界面都在main里new,但是我做不到把登录界面中的登录成功的socket消息发到main。。第一次用Qt,很多不知道的地方[/quote] 这个和你安装事件过滤器有什么关系么? 在任何一个控件内的任何时候都可以给qApp安装事件过滤器
YouNeverCanTell 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 dbzhang800 的回复:
直接给你的QApplication安装一个事件过滤器即可
有想过,但是我的主窗口不是在main里new的,因为先要在main里new一个登录界面,登录成功后直接在登录类里new出来的主界面。可能更好的设计是登录界面和主界面都在main里new,但是我做不到把登录界面中的登录成功的socket消息发到main。。第一次用Qt,很多不知道的地方
dbzhang800 2014-08-07
  • 打赏
  • 举报
回复
直接给你的QApplication安装一个事件过滤器即可
YouNeverCanTell 2014-08-07
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
1. 在一个Qt程序中,QApplication 对所有类都是可见的! 2. 退一步讲,在C++程序中,即使一个类对象对其他类不可见,你也应该有办法使其可见吧?
谢谢,确实有个qApp可以用,已经做了事件过滤,但是还没达到效果。我再研究下。

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧