How to detect if a Qt GUI application has been idle, inside the app itself (Qt)?

后端 未结 2 1596
情话喂你
情话喂你 2021-01-02 12:08

How to detect when a GUI application has been idle, (ie, no user interaction), for a period of time ?

I have n number of Qt Screens , I want to bring Date-Time scree

相关标签:
2条回答
  • 2021-01-02 12:49

    According to QT Documentation :

    To make your application perform idle processing (i.e. executing a special function whenever there are no pending events), use a QTimer with 0 timeout. More advanced idle processing schemes can be achieved using processEvents().

    So you need to create a QTimer with zero timeout interval and connect it to your slot that is called when application is idle.

    0 讨论(0)
  • 2021-01-02 13:09

    Override QCoreApplication::notify and a timer on mouse/keyboard events?

    (Or just store the time of the event and have a timer check that value periodically, which might be faster than resetting a timer all the time.)

    class QMyApplication : public QApplication
    {
    public:
        QTimer m_timer;
    
        QMyApplication() {
            m_timer.setInterval(5000);
            connect(&m_timer, SIGNAL(timeout()), this, SLOT(app_idle_for_five_secs());
            m_timer.start();
        }
    slots:
        bool app_idle_for_five_secs() {
            m_timer.stop();
            // ...
        }
    protected:
        bool QMyApplication::notify ( QObject * receiver, QEvent * event )
        {
            if (event->type == QEvent::MouseMove || event->type == QEvent::KeyPress) {
                 m_timer.stop(); // reset timer
                 m_timer.start();
            }    
            return QApplicaiton::notify(receiver, event);
        }
    };
    
    0 讨论(0)
提交回复
热议问题