您的位置:首页 > 编程语言 > Qt开发

qt判断用户是否正在使用当前应用程序

2017-09-29 19:58 681 查看
如何在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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐