Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT事件问题_C++_Qt_Events - Fatal编程技术网

C++ QT事件问题

C++ QT事件问题,c++,qt,events,C++,Qt,Events,我正在编写一个qt程序,并有以下要求 当30秒未点击时,锁定屏幕。如果有人在30秒后再次单击,请将其重定向到登录屏幕。 我已经阅读了关于事件的qt文档,我相信我需要方法1或2来处理鼠标事件 1.在qApp上安装事件筛选器 qApp上的事件筛选器监视发送到应用程序中所有对象的所有事件 2.重新实现QApplication::notify()。 Qt的事件循环和sendEvent()调用此函数以分派事件。通过重新实现它,您可以在其他人之前看到事件 在我看来,它们也很强大,但我不理解它们的区别。 哪一

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

当30秒未点击时,锁定屏幕。如果有人在30秒后再次单击,请将其重定向到登录屏幕。

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

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

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

在我看来,它们也很强大,但我不理解它们的区别。
哪一个适合我的要求?谢谢。

除了QApplication::notify(或其覆盖)将在应用程序上的任何事件筛选器之前调用之外,您基本上可以用这两种解决方案实现相同的效果

由于第一种方法不需要对QApplication进行子类化,因此它通常是首选方法。在您的情况下,重写QApplication::notify的唯一原因是您是否因为其他原因需要重写它,例如,因为您需要执行与您自己的自定义事件相关的任何操作

但考虑到您的需求,我个人会选择以下解决方案:

  • 在qApp上安装事件筛选器
  • 创建一个间隔为30秒的计时器
  • 将计时器连接到锁屏方法
  • 让您的事件筛选器在每次检测到鼠标按下时重置计时器
  • 根据应用程序的不同,您可能还需要查找按键事件,也可能需要查找MouseMove事件