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工具网。
推荐阅读: