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