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

如何在qt程序中判断当前应用程序是否被用户使用呢?我们先了解一下QApplication这个类

简单的说,QApplication 类管理图形用户界面应用程序的控制流和主要设置。可以说 QApplication是Qt的整个后台管理的命脉

它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。

QApplication类 中函数notify 负责事件的通知和分发,这样 我们重写这个函数就可以啦。

//主要功能,判断用户是否在当前应用程序中触发了鼠标事件或者键盘事件

源码

头文件,listener.h

#pragma once

#include

#include

#include

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;

}

你可能感兴趣的:(qt判断用户是否正在使用当前应用程序)