QT事件问题

时间:2011-08-11 02:38:45

标签: c++ qt events

我正在写一个qt程序,并有以下要求。

在没有任何点击的情况下经过30秒后,锁定屏幕。如果有人在这30秒后再次点击,则将其重定向到登录屏幕。

我已经阅读了关于事件的qt doc,我相信我需要方法1或2来处理鼠标事件。

  

1.在qApp上安装事件过滤器     qApp上的事件过滤器监视发送到应用程序中所有对象的所有事件。

     

2.重新实现QApplication :: notify()。     Qt的事件循环和sendEvent()调用此函数来调度事件。通过重新实现它,您可以在任何其他人之前看到事件。

他们对我来说似乎也很强大,但我不明白他们的区别。 哪一个适合我的要求?谢谢。

1 个答案:

答案 0 :(得分:2)

除了QApplication :: notify(或其覆盖)在任何可能在您的应用程序上的事件过滤器之前被称为这一事实之外,您基本上可以实现相同的解决方案。

由于第一种方法不需要子类化QApplication,它通常是首选方法。在您的情况下覆盖QApplication :: notify的唯一原因是,如果由于其他原因需要覆盖它,例如,因为你需要做任何与你自己的自定义事件有关的事情。

但考虑到您的要求,我个人会寻求以下解决方案:

  1. 在qApp上安装事件过滤器
  2. 创建间隔为30秒的计时器
  3. 将计时器连接到锁定屏幕方法
  4. 每次检测到鼠标按下时,让事件过滤器重置计时器。
  5. 根据您的应用程序,您可能还想查找KeyPress事件以及MouseMove事件。