Qt怎么获取电脑锁屏时间?Qt如何实现超时锁屏?

Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。那我们要获取电脑锁屏时间用qt怎么操作呢?下面来我们就来给大家讲解一下。

代码如下:

QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间
QString strTime = time.toString("yyyy-MM-dd hh:mm:ss;mmm");//设置系统时间显示格式
ui->timelabel->setText(strTime);//在标签上显示时间

Qt如何实现超时锁屏?

首先开启一个线程用于QTimer定时器计时,最开始进入软件开启定时器计时,超时则显示锁屏窗口;而手触摸屏幕会触发鼠标点击事件,则停止计时;而手离开屏幕会触发鼠标释放事件,则重新开始计时。

因为是多窗口的应用软件,所以需要监控全局鼠标事件,所以需要子类化QApplication类,注:稍加修改,可以用在PC端的应用软件上,进一步检测鼠标移动事件和键盘事件即可。

实现代码:

监控全局鼠标事件的类为GlobalApplication,其中也实现了开启一个线程进行定时器计时,以及超时显示锁屏窗口的功能。

globalapplication.h 文件的内容如下:

#
ifndef GLOBALAPPLICATION_H# define GLOBALAPPLICATION_H#include#include#include#include#include#include "widget_lock.h"
class GlobalApplication: public QApplication
{
    Q_OBJECT
    public:
        GlobalApplication(int & argc, char ** argv);
    ~GlobalApplication();
    bool notify(QObject * , QEvent * );
    private slots:
        void onTimeOut(); //超时锁屏槽函数
    private:
        Widget_Lock * m_myLockWindow; //锁屏窗口
    QObject * m_currWinObj; //鼠标事件发生时的当前所在窗口
    QTimer * m_pTimer; //定时器
    QThread * m_pThread; //定时器线程
};#
endif // GLOBALAPPLICATION_H

注:Widget_Lock 为锁屏窗口类,具体实现代码在这里由于篇幅问题不再贴出,可以替换成你自己要显示的窗口。

globalapplication.cpp 文件的内容如下:

#include "globalapplication.h"
GlobalApplication::GlobalApplication(int & argc, char ** argv):
    QApplication(argc, argv)
    {
        m_currWinObj = new QObject(); //初始化鼠标事件发生时的当前所在窗口
        //初始化定时器线程和定时器
        m_pThread = new QThread(this);
        m_pTimer = new QTimer();
        m_pTimer - > moveToThread(m_pThread);
        m_pTimer - > setInterval(4000);
        connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
        connect(m_pTimer, SIGNAL(timeout()), this, SLOT(onTimeOut()));
        //开启线程,调用定时器的start()
        m_pThread - > start();
        m_myLockWindow = new Widget_Lock(); //初始化锁屏窗口
        m_myLockWindow - > m_unlockFlag = true; //初始化解除锁屏成功标志
    }
GlobalApplication::~GlobalApplication()
{
    //彻底结束线程(单独的一个quit()无法彻底结束进程)
    m_pThread - > requestInterruption();
    m_pThread - > quit();
    m_pThread - > wait();
}
bool GlobalApplication::notify(QObject * obj, QEvent * e)
{
    //因为鼠标点击或滑动到任何窗口部件都会进入该函数,所以根据objectName()过滤窗口部件
    if (obj - > objectName()
        .right(1) == "W") //cleanW mainW
    {
        //工控机是触摸屏,触摸屏幕和滑动屏幕都会点击屏幕,所以这里只检测鼠标点击事件
        if (e - > type() == QEvent::MouseButtonPress) //不区分左右键按下了
        {
            //qDebug() << "objName:" << obj->objectName();
            //qDebug()<<"press stop";
            m_pThread - > quit(); //线程结束后,则在此线程的定时器会自动停止计时
        }
        else if (e - > type() == QEvent::MouseButtonRelease)
        {
            //qDebug()<<"release start";
            m_pThread - > start(); //线程开始,会发送started()信号,启动定时器的start()槽函数
        }
        m_currWinObj = obj; //获得鼠标事件发生时的当前所在窗口
    }
    return QApplication::notify(obj, e);
}
//超时锁屏槽函数void GlobalApplication::onTimeOut(){
//m_unlockFlag为false,表示锁屏窗口未关闭,则即使再超时也不会再显示锁屏窗口
if (m_myLockWindow - > m_unlockFlag == true) //当密码输入正确后,关闭锁屏窗口,则会将m_unlockFlag设置为true
{
    qDebug() << "锁屏";
    //创建锁屏窗口对象,并显示该窗口
    m_myLockWindow = new Widget_Lock(static_cast(m_currWinObj));
    m_myLockWindow - > show();
    //这行代码要放在最后,因为在构建对象时,会自动设置m_unlockFlag,所以在构建后要复位m_unlockFlag
    m_myLockWindow - > m_unlockFlag = false;
}
else
    qDebug() << "重复锁屏";
}

然后将main函数里的 Application a(argc, argv); 换成:GlobalApplication a(argc, argv);这样在任何窗口点击鼠标,都能响应到,并获得鼠标事件发生时的当前所在窗口。当超时后,在当前所在窗口显示锁屏窗口。

实现Qt现超时锁屏主要就是需要开启一个线程用于QTimer定时器计,当我们长时间不触摸屏幕的时候,程序超时会显示锁屏窗口。最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

git客户端如何提交代码?git客户端提交代码步骤

java泛型类和泛型方法怎么使用?java泛型知识讲解

java如何写九九乘法表?java写九九乘法表代码实例