如何检测Qt中的用户不活动?

Jak*_*les 5 c++ qt user-inactivity python-idle

如何在Qt QMainWindow中检测用户不活动?到目前为止,我的想法是使用一个QTimer来增加一个计数器,如果传递了某个值,它将锁定应用程序.任何鼠标或键交互都应该将计时器设置回0.但是我需要知道如何正确处理重置的输入事件; 我可以重新实施:

virtual void keyPressEvent(QKeyEvent *event)
virtual void keyReleaseEvent(QKeyEvent *event)
virtual void mouseDoubleClickEvent(QMouseEvent *event)
virtual void mouseMoveEvent(QMouseEvent *event)
virtual void mousePressEvent(QMouseEvent *event)
virtual void mouseReleaseEvent(QMouseEvent *event)
Run Code Online (Sandbox Code Playgroud)

...但是QMainWindow中所有小部件的事件处理程序不会阻止这些控件中发生的事件到达QMainWindow吗?是否有更好的架构来检测用户活动?

Gre*_*g S 9

您可以使用自定义事件过滤器来处理应用程序在将其传递给子窗口小部件之前接收的所有键盘和鼠标事件.

class MyEventFilter : public QObject
{
  Q_OBJECT
protected:
  bool eventFilter(QObject *obj, QEvent *ev)
  {
    if(ev->type() == QEvent::KeyPress || 
       ev->type() == QEvent::MouseMove)
         // now reset your timer, for example
         resetMyTimer();

    return QObject::eventFilter(obj, ev);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后用类似的东西

MyApplication app(argc, argv);
MyEventFilter filter;
app.installEventFilter(&filter);
app.exec();
Run Code Online (Sandbox Code Playgroud)

这肯定有效(我自己尝试过).

编辑:非常感谢ereOn指出我早期的解决方案不是很有用.