如何在qt程序中判断当前应用程序是否被用户使用呢?我们先了解一下QApplication这个类
简单的说,QApplication 类管理图形用户界面应用程序的控制流和主要设置。可以说 QApplication是Qt的整个后台管理的命脉
它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。
QApplication类 中函数notify 负责事件的通知和分发,这样 我们重写这个函数就可以啦。
//主要功能,判断用户是否在当前应用程序中触发了鼠标事件或者键盘事件
源码
头文件,listener.h
#pragma once
#include<time.h>
#include <QApplication>
#include<QTimer>
class Listener :public QApplication
{
Q_OBJECT
public:
Listener(int&argc, char**argv);
~Listener();
signals:
void idle();
private:
bool notify(QObject *receiver, QEvent *event);
time_t m_lastActive;
QTimer *m_timer;
private slots:
int TimeEvent();
};
Cpp文件
#include "Listener.h"
Listener::Listener(int&argc, char**argv)
: QApplication(argc,argv)
{
m_lastActive =time(NULL);
m_timer =new QTimer(this);
m_timer->start(1000);
connect(m_timer, SIGNAL(timeout()),this, SLOT(TimeEvent()));
}
Listener::~Listener()
{
}
bool Listener::notify(QObject *receiver, QEvent *event)
{
if (event->type()== QEvent::MouseMove
||event->type()== QEvent::KeyPress)
{
m_lastActive =time(NULL);
}
return QApplication::notify(receiver, event);
}
int Listener::TimeEvent()
{
time_t now =time(NULL);
int elapsed =now - m_lastActive;
if (m_lastActive>0&&elapsed> 20)
{
emit idle();
m_lastActive =time(NULL);
}
return0;
}
591

被折叠的 条评论
为什么被折叠?



