gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:10 24 4
gpt4 key购买 nike

如何检测 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)

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

最佳答案

您可以使用自定义事件过滤器来处理您的应用程序接收到的所有键盘和鼠标事件,然后再将它们传递给子小部件。

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);
}
}

然后使用类似的东西

MyApplication app(argc, argv);
MyEventFilter filter;
app.installEventFilter(&filter);
app.exec();

这绝对有效(我自己试过了)。

编辑:非常感谢 ereOn 指出我之前的解决方案不是很有用。

关于c++ - 如何检测 Qt 中的用户不活动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3341617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com