Qt事件過濾器實現空閑檢測
class idleDectector : public QObject
{
Q_OBJECT
public:
explicit idleDectector(QObject *parent = nullptr);
~idleDectector();
signals:
void idle();
protected:
bool eventFilter(QObject* obj, QEvent* event) override;
virtual void timerEvent(QTimerEvent*) override;
private:
QDateTime lastOperationTime;
int timerID;
};
idleDectector::idleDectector(QObject *parent)
: QObject{parent}
, timerID(0)
{
lastOperationTime = QDateTime::currentDateTime();
qApp->installEventFilter(this);
if (Config::GetInstance().getIdleTime() != 0)
{
timerID = this->startTimer(1000);
}
}
idleDectector::~idleDectector()
{
if (0 != timerID)
{
this->killTimer(timerID);
}
}
void idleDectector::timerEvent(QTimerEvent* event)
{
if (timerID == event->timerId())
{
if ((QDateTime::currentSecsSinceEpoch() - lastOperationTime.toSecsSinceEpoch()) >
(qint64)Config::GetInstance().getIdleTime() * 60)
{
emit idle();
lastOperationTime = QDateTime::currentDateTime();
}
}
}
bool idleDectector::eventFilter(QObject* obj, QEvent* event)
{
switch (event->type())
{
case QEvent::MouseMove:
case QEvent::KeyPress:
case QEvent::MouseButtonPress:
lastOperationTime = QDateTime::currentDateTime();
break;
default:
break;
}
return QObject::eventFilter(obj, event);
}
應用:
MainWindow連接信號和槽
connect(&mDecector, &idleDectector::idle, this, &MainWindow::onIdle);

浙公網安備 33010602011771號