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);
来源链接:https://www.cnblogs.com/kuaixue/p/18681270










没有回复内容