当前位置: 首页 > news >正文

025-第三代软件开发-实现需求长时间未操作返回登录界面

头图

第三代软件开发-实现需求长时间未操作返回登录界面

文章目录

  • 第三代软件开发-实现需求长时间未操作返回登录界面
    • 项目介绍
    • 实现需求长时间未操作返回登录界面
      • 实现思路
      • 用户操作监控
      • QML 逻辑处理

关键字: QtQmlQTimertimeouteventFilter

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

实现需求长时间未操作返回登录界面

实现思路

在主窗口类中定义一个计时器对象QTimer *timer和一个时间间隔,用于记录用户最后一次操作的时间。

QTimer *timer;
int idleTime;

在构造函数中初始化计时器,并连接计时器的timeout()信号到一个槽函数。

timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &MainWindow::checkIdleTime);

在主窗口类中实现一个事件过滤器函数eventFilter(),用于监测用户的操作事件。在该函数中,如果接收到鼠标点击、键盘按键或移动事件,则更新计时器记录的时间。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{if (event->type() == QEvent::KeyPress || event->type() == QEvent::MouseButtonPress ||event->type() == QEvent::MouseMove){idleTime = 0; // 重置计时}return QObject::eventFilter(obj, event);
}

在主窗口的showEvent()函数中设置事件过滤器,以便开始监测用户操作事件。

void MainWindow::showEvent(QShowEvent *event)
{QWidget::showEvent(event);qApp->installEventFilter(this);idleTime = 0; // 重置计时timer->start(1000); // 启动计时器,每秒触发一次 timeout() 信号
}

实现槽函数checkIdleTime(),在该函数中检查空闲时间是否超过设定的阈值。如果超过,则显示登录界面,并停止计时器。

void MainWindow::checkIdleTime()
{idleTime++;if (idleTime >= MAX_IDLE_TIME){qApp->removeEventFilter(this); // 停止事件过滤器timer->stop(); // 停止计时器// 显示登录界面的代码showLoginDialog();}
}

通过以上步骤,我们可以实现长时间未操作后返回登录界面的功能。在用户进行任何操作时,会重置计时器的时间;若用户在一段时间内没有操作,计时器会超过预设的阈值,触发返回登录界面的操作。需要根据实际情况自行调整MAX_IDLE_TIME的值,以秒为单位。同时,需要在主窗口类中添加与登录界面相关的自定义函数showLoginDialog(),来显示登录界面。

如果你碰巧看来我上一篇文章【第三代软件开发-TabView】,而且你还看我的另外一篇已经发表的文章https://blog.csdn.net/z609932088/article/details/130926692?spm=1001.2014.3001.5501

image-20230728225427116

那么就已经知道怎么做了吧。

用户操作监控

用户能操作什么呢,键鼠和触屏,应该没有其他的吧,所以咱们这里只需要处理这些,这部分在我上一篇已经发布的博文中已经说了,咱们直接就附代码凑字数了。

bool XXXX::eventFilter(QObject *obj, QEvent *event)
{/*** 捕获键盘事件**/if( event->type() == QEvent::KeyPress ||                    // 键盘按下event->type() == QEvent::MouseMove ||                   // 鼠标移动event->type() == QEvent::MouseButtonPress ||            // 鼠标按键按下event->type() == QEvent::Wheel ||                       // 鼠标滚轮事件event->type() == QEvent::TouchBegin)                    // 屏幕触屏事件{m_lockScreenTimer->start(m_timerLong);setLockScreen(false);}
#ifdef QT_NO_DEBUG/*** 禁止正常关闭程序**/if(event->type() == QEvent::Close && !m_closeSystem)event->ignore();
#endifreturn QObject::eventFilter(obj,event);
}

注意哦,这里是C++的代码,我们需要把这个注册成QML可以识别的模块,这里还有就是要注意,我这个事建过滤器是安装给了QApplication。代码如下

QApplication::instance()->installEventFilter(this);

QML 逻辑处理

    XXXX{id: keymonitortimerLong: UserProfile.screenProtectTime                                     // 屏保时间onLockScreenChanged:{if(tabview_mainFrame.currentIndex === 0){if(lockScreen){tabview_mainFrame.getTab(0).item.lockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()return}if(tabview_mainFrame.getTab(1).item){if(lockScreen && !(tabview_mainFrame.getTab(1).item.frameIndex === 1 || tabview_mainFrame.getTab(1).item.frameIndex === 0)){tabview_mainFrame.currentIndex = 0;tabview_mainFrame.getTab(0).item.lockScreen()tabview_mainFrame.getTab(1).item.signalLockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()}else{if(lockScreen){tabview_mainFrame.currentIndex = 0;tabview_mainFrame.getTab(0).item.lockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()}}}

这里不需要咱们做过多解读,因为有部分代码是为了业务,即在某一模式下不能锁屏,就和咱们看电影全屏不能进屏保一个道理。


博客签名2021

相关文章:

025-第三代软件开发-实现需求长时间未操作返回登录界面

第三代软件开发-实现需求长时间未操作返回登录界面 文章目录 第三代软件开发-实现需求长时间未操作返回登录界面项目介绍实现需求长时间未操作返回登录界面实现思路用户操作监控QML 逻辑处理 关键字: Qt、 Qml、 QTimer、 timeout、 eventFilter 项目介绍 欢迎…...

驱动开发LED灯绑定设备文件

头文件 #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;#define PHY_LED1_ADDR 0x50006000 #define PHY_LED2_ADDR 0x50007000 #defin…...

MySql 数据库基础概念,基本简单操作及数据类型介绍

文章目录 数据库基础为什么需要数据库?创建数据库mysql架构SQL语句分类编码集修改数据库属性数据库备份 表的基本操作存在时更新,不存在时插入 数据类型日期类型enum和set 数据库基础 以特定的格式保存文件,叫做数据库,这是狭义上…...

异步加载 JavaScript

目录 ​编辑 前言:异步加载 JavaScript 的重要性 详解:异步加载 JavaScript 的方法 使用 使用动态创建标签: 使用模块引入(ES6模块): 解析:异步加载 JavaScript 的重要性和优势 实践和注…...

汽车屏类产品(四):仪表Cluster

###前言 仪表Cluster/仪表盘Dashboard,作为伴随汽车诞生就存在的一个主要零部件之一,从机械到电子到数字,可以说也是逐渐发展到现在的。 目前的主流框图如下,中间processor就是主控芯片,可能有buttons/switches,有display显示屏+backlight背光,有audio->speake…...

【GA-ELM】基于遗传算法优化极限学习机回归预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

DFT和ATE岗位前景薪资对比,手把手教你如何选择岗位?

ATE测试和DFT可测性设计,虽然二者都对芯片测试至关重要,但是两个岗位的区别还是很大的。 两个岗位应该如何做选择? 先讲产业环节 我们知道芯片设计、芯片制造、芯片封测每个环节都是大工程,且每个环节都关键且重要。测试是芯片诞…...

驱动day4作业

通过字符设备驱动的分步实现编写LED驱动,另外实现特备文件和设备的绑定 head.h #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }…...

【Oracle】VC6.0使用 odbc 访问 Oracle 存储过程

环境说明 系统环境 系统:Windows XP IDE: Microsoft Visual C 6.0 使用的对象 msado15.tlh _ConnectionPtr m_pConnection; HRESULT hr m_pConnection.CreateInstance(“ADODB.Connection”); _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstan…...

QWidget快速美化-圆形蓝色单选框

将代码复制进QRadioButton的样式表 效果: 代码: QRadioButton{font:75 9pt "Arial";background:transparent;color:white;border:none; }QRadioButton:disabled{color:gray; }QRadioButton::indicator{width:12px;height:12px;border-radius:8px; }QRadioButton::i…...

adb 获取当前界面元素

adb配置正确,直接看6,pull的位置是你执行pull的目录下。 --------------------------------------------------------------------------------------------------------------------------------- 使用adb命令获取当前应用的元素需要先连接到手机或模…...

SpringSecurity源码学习四:会话管理

目录 1. 什么是会话管理2. springSecurity中的session管理怎么做的3. springSecurity源码中的session管理4. 代码示例5. 源码5.1 不同策略的含义 6. 集群模式session管理7. 总结 1. 什么是会话管理 会话管理是指在Java应用程序中管理用户会话状态的过程。在Spring框架中&#…...

Kotlin笔记(七):协程

1. 协程的定义 协程属于Kotlin中非常有特色的一项技术,因为大部分编程语言中是没有协程这个概念的。 什么是协程呢?它其实和线程是有点类似的,可以简单地将它理解成一种轻量级的线程。要知道,线程是非常重量级的,它需要…...

存储优化知识复习二详细版解析

存储优化 知识复习二 一、 选择题 1、 对数据库调优的方法中,最困难但是最有成效的是( )。 A、优化表的架构设计 B、添加内存 C、索引优化 D、查询语句优化 【参考答案】A2、 防止与处理死锁的方法有( )。 A、尽量避免或尽快处理阻塞 B、访…...

《持续交付:发布可靠软件的系统方法》- 读书笔记(七)

持续交付:发布可靠软件的系统方法(七) 第 7 章 提交阶段7.1 引言7.2 提交阶段的原则和实践7.2.1 提供快速有用的反馈7.2.2 何时令提交阶段失败7.2.3 精心对待提交阶段7.2.4 让开发人员也拥有所有权7.2.5 在超大项目团队中指定一个构建负责人 …...

Go源码实现使用多线程并发下载大文件的功能

摘要:Go语言编码实现了使用多线程并发下载文件的功能。 1. 代码流程介绍 1. 获取系统的CPU核心数量,并将其作为线程数的参考值,并打印出来。 2. 定义要下载的文件的URL、线程数和输出文件名。 3. 使用getFileSize()函数获取文件大小&#xf…...

Python基础入门例程1-NP1 Hello World!

描述 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来。 输入描述: 无 输出描述: 一行输出字符串Hello World! 解答: str "Hello World!" print(str) 解释说明: 赋值变量&…...

前端面试题10.23

解决的最复杂的前端问题,介绍一下 最复杂的前端问题之一是浏览器兼容性,不同浏览器对网页的渲染方式存在差异,需要针对不同浏览器做兼容性处理。此外,前端性能优化也是一个复杂的问题,需要综合考虑网页加载速度、渲染…...

DYC算法开发与测试(基于ModelBase实现)

ModelBase是经纬恒润开发的车辆仿真软件,包含两个大版本:动力学版本、智能驾驶版本。动力学版包含高精度动力学模型,能很好地复现车辆在实际道路中运行的各种状态变化,可用于乘用车、商用车动力底盘系统算法开发、控制器仿真测试&…...

第四章 路由基础

目录 4.1 路由器概述 4.1.1 路由器定义 4.1.2 路由器工作原理 4.1.3 路由表的生成方式 (1)直连路由 (2)静态路由 (3)动态路由 4.1.4 路由器的接口 (1)配置接口 &#xff0…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...