qt android屏幕锁屏,Qt 实现超时锁屏
最近使用Qt实现超时锁屏的功能(工控机触摸屏),当手长时间不触摸屏幕的时候,程序超时会显示锁屏窗口。
一、效果
主窗口超时显示锁屏窗口:
系统窗口超时显示锁屏窗口:
二、实现思路
首先开启一个线程用于QTimer定时器计时,最开始进入软件开启定时器计时,超时则显示锁屏窗口;而手触摸屏幕会触发鼠标点击事件,则停止计时;而手离开屏幕会触发鼠标释放事件,则重新开始计时。线程与定时器参考了这篇博客:Qt——线程与定时器。
因为是多窗口的应用软件,所以需要监控全局鼠标事件,所以需要子类化QApplication类,这里我参考了这篇博客:QT中监控全局键盘鼠标事件。
注:稍加修改,可以用在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()<
m_pThread->quit(); //线程结束后,则在此线程的定时器会自动停止计时
}
else if(e->type() == QEvent::MouseButtonRelease)
{
//qDebug()<
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 android屏幕锁屏,Qt 实现超时锁屏相关推荐
- qt android图片自适应大小,Qt on Android:怎样适应不同的屏幕尺寸
使用 Qt 开发的 Android 应用,怎样适应 Android 智能手机各种各样的屏幕尺寸? 说到屏幕尺寸,从 2.8 吋到 8.9 吋的手机屏幕都有,这对程序猿们来讲痛苦可不只一点. Andro ...
- qt android安装在哪,Qt On Android开发环境安装、配置
本文记录在Windows 8.1下,Qt on Android 5.5开发环境的安装和配置. 1.安装JDK 到甲骨文网站下载JDK:http://www.oracle.com 下载安装成功后,设置环 ...
- qt android播放器代码,Qt on android 播放视频的实现
本文介绍的是使用QML进行视频的播放,可以直接编译为APK在android上运行. QML中对多媒体的处理提供了很多方便的组件,对于播放音频.视频都很方便.这些多媒体组件属于Qt Multimedia ...
- qt android 网络编程实例,QT网络编程Tcp下C/S架构的即时通信实例
先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include #include #include # ...
- qt android opengl,案例:实现Qt和OpenGL混合渲染 | 求索阁
Qt自有一个绘图的引擎,这个引擎的核心就是QPainter,我们知道QPainter在渲染二维图形和文字有很大的优势,而OpenGL是当前流行的三维渲染器,怎样才能将两者结合起来,制作更为丰富的应用程 ...
- qt android文件读写文件,qt android 开发之写入xml配置文件篇
应用初始化本地数据,需要读取配置文件,小编介绍如何通过xml简单写入配置文件,至于为什么选择这个格式,主要因为在qml中有一个很好 的类使用:XmlListModel xmlListModel能直接读 ...
- qt android漂亮控件,qt android 开发之炫酷控件的制做
手机应用开发,就是吸引用户,要吸引用户,确定离不开用户体验!此次给你们分享一个自做的炫酷qml控件:fanControler 这个控件目前有点bug,不过整体效果仍是很赞的,经过滑动划片来控制风扇的转 ...
- android设置不锁屏adb,如何通过ADB锁定Android屏幕?
如何通过ADB锁定Android屏幕? 有没有办法通过ADB锁定Android屏幕? 我找到了将显示锁定在apk中的方法,但是我想通过ADB从PC锁定屏幕,以模拟显示超时,而不必等待超时. 是否有可能 ...
- android系统锁屏锁怎么解决方法,Android 屏幕锁 - WakeLock
Android 屏幕锁 - WakeLock Android,powermanager,wakelock,屏幕, PowerManager android.os.PowerManager PowerM ...
最新文章
- Silverlight中使用控件模板的问题(自己添加控件的方法)
- helm滚动更新mysql_kubernetes使用helm滚动更新
- cookie版购物车
- 我的技术回顾那些与ABP框架有关的故事-2017年
- Linux shell脚本启动 停止 重启jar包
- visio防火墙可以连接什么_画流程图,就是要用Visio软件!
- android edittext drawable,android – 在事件上显示复合drawable到EditText
- (转自YYW'S BLOG)IListT 转换成 DataSet
- vst和vst3插件_用于家庭录音的经典VST插件
- php实现身份证号码获取归属地地址的实例
- [已解决] idea插件下载不了
- 并购支付牌照中金支付90.01%股权该注意哪些风险
- Predicting Ship T rajectory Based on Neural Networks UsingAIS Data
- ❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置
- 学计算机Java和c语言哪个出路比较好
- 1688采源宝的商家靠谱吗 怎么入驻成为阿里采源宝商家
- [Django1.5] two-scoops-django-best-practices 读书笔记
- 微谈网页设计颜色搭配原则与方法
- fast角点与ShiTomas角点速度对比
- Mac常备必用的软件-mac软件推荐