031-第三代软件开发-屏幕保护

第三代软件开发-屏幕保护
文章目录
- 第三代软件开发-屏幕保护
- 项目介绍
- 屏幕保护
关键字:
Qt
、
Qml
、
MediaPlayer
、
VideoOutput
、
function
项目介绍
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。
在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。
在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。
无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!
重要说明☝
☀该专栏在第三代软开发更新完将涨价
屏幕保护
之前在Windows平台上是咋搞的,是写成了一个单独的程序了,启动后默认在后台运行,试试监测用户操作行为,如果一定时间没有操作,就弹出显示屏幕保护内容。这个方法是因为我们的主程序不是自己写的,所以,哈哈哈,只能曲线救国,
现在的程序每个字符都是自己手撸出来的,所以直接就在程序中实现了,当然,前面【第三代软件开发-实现需求长时间未操作返回登录界面】以及实现了逻辑上的控制了,今天咱们这里主要将的是屏幕保护的内容,目前我们屏幕保护内容就是循环播放一个视频,所以是线上没有啥难度,直接上代码:
Rectangle
{/*屏幕保护界面*/id:rect_lockScreenanchors.fill: parentcolor: "black"visible: falseMediaPlayer{id:media_logosource: UserProfile.logoVideoPath // 绝对路径muted: trueloops: MediaPlayer.Infinite}VideoOutput{id:out_putanchors.fill: parentsource: media_logo}onVisibleChanged:{if(visible)media_logo.play()elsemedia_logo.stop()}Image {width: 232height: 262anchors.left: parent.leftanchors.top:parent.topanchors.margins: 50source: "qrc:/Logo/T_Resource/T_Image/Logo/Turing_logo.png"}
}
/**锁屏*/
function lockScreen()
{if(tabview_login.currentIndex == 1)tab_userManahement.item.closePopup()rect_lockScreen.visible = true
}
/**恢复*/
function unLockScreen()
{rect_lockScreen.visible = falsetabview_login.currentIndex = 0
}
这段代码是一个QML(Qt Meta-Object Language)代码片段,用于实现屏幕保护界面和相关功能。下面是对代码的解释:
Rectangle:定义一个矩形组件作为屏幕保护界面的背景。设置id为"rect_lockScreen",填充父级元素、颜色为黑色,并初始时不可见。
MediaPlayer:定义一个媒体播放器组件,设置id为"media_logo"。使用UserProfile.logoVideoPath作为视频的绝对路径(需要提前在UserProfile中定义),设置静音(muted: true)并循环播放视频(loops: MediaPlayer.Infinite)。
VideoOutput:定义一个视频输出组件,设置id为"out_put"。将该组件的大小设置为填充父级元素,并将其源指定为media_logo。
onVisibleChanged:当rect_lockScreen可见性发生变化时触发的信号处理函数。如果可见,则调用media_logo.play()开始播放视频;否则调用media_logo.stop()停止播放视频。
Image:定义一个图像组件,显示一个logo图片。设置宽度为232、高度为262,左上角锚点为父级元素的左上角,设置外边距为50。图像的源文件是"Turing_logo.png"。
lockScreen()函数:用于触发锁屏操作。如果tabview_login的currentIndex属性为1(即当前选项卡为第二个选项卡),则关闭tab_userManahement.item的弹出窗口,然后将rect_lockScreen的可见性设置为true以显示屏幕保护界面。
unLockScreen()函数:用于触发解锁操作。将rect_lockScreen的可见性设置为false以隐藏屏幕保护界面,并将tabview_login的currentIndex属性设置为0,将当前选项卡切换回第一个选项卡。
其实还有更简单方法,但是后期你真的开发的时候,可能就会发现了问题了哦,这里先买个关子吧,和面咱们还要写一个简单的视频播放器在聊
Video {id: videowidth : 800height : 600source: "video.avi"MouseArea {anchors.fill: parentonClicked: {video.play()}}focus: trueKeys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play()Keys.onLeftPressed: video.seek(video.position - 5000)Keys.onRightPressed: video.seek(video.position + 5000)}
这段代码是一个QML(Qt Meta-Object Language)代码片段,用于创建一个视频播放器组件。下面是对代码的解释:
Video:定义一个视频组件,设置id为"video"。该组件的宽度为800、高度为600,并设置视频源为"video.avi"。
MouseArea:定义一个鼠标区域组件,填充父级元素大小。当鼠标在该区域内点击时,触发onClicked信号处理函数。其中,调用video.play()方法开始播放视频。
focus:设置视频组件获取焦点,以便按键事件可以被该组件接收。
Keys.onSpacePressed:当空格键被按下时触发的信号处理函数。判断当前视频播放状态(playbackState),如果是MediaPlayer.PlayingState(正在播放状态),则调用video.pause()方法暂停播放;否则调用video.play()方法继续播放。
Keys.onLeftPressed:当左箭头键被按下时触发的信号处理函数。调用video.seek()方法将视频跳转到当前位置减去5000毫秒的位置,实现向后快进5秒的效果。
Keys.onRightPressed:当右箭头键被按下时触发的信号处理函数。调用video.seek()方法将视频跳转到当前位置加上5000毫秒的位置,实现向前快进5秒的效果。

相关文章:

031-第三代软件开发-屏幕保护
第三代软件开发-屏幕保护 文章目录 第三代软件开发-屏幕保护项目介绍屏幕保护 关键字: Qt、 Qml、 MediaPlayer、 VideoOutput、 function 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language&#…...
Ubuntu 22.04 更新完内核重启卡在 grub 命令行解决办法
倒霉伊始 升级内核过程中出现如下警告,然后重启引导失败: Warning: os-prober will not be executed to detect other bootable partitions 屏幕内容如下: GNU GRUB version 2.06Minimal BASH-like line editing is supported. For the fir…...

Stream流式处理
Stream流式处理: 建立在Lambda表达式基础上的多数据处理技术。 可以对集合进行迭代、去重、筛选、排序、聚合等处理,极大的简化了代码量。 Stream常用方法 Stream流对象的五种创建方式 //基于数组 String[] arr {"a","b","c…...
ROG STRIX GS-AX5400 使用笔记
1. 技术支持 咨询京东(因为是在京东购买的) 2. 增强信号设置 Note:关于设置的具体步骤,请参考教程《华硕路由器地区如何改成澳大利亚》。 操作路径:打开主页<192.168.50.1> ⇒ 输入用户名和密码后选择登录 ⇒ …...

【刷题-PTA】堆栈模拟队列(代码+动态图解)
【刷题-PTA】堆栈模拟队列(代码动态图解) 文章目录 【刷题-PTA】堆栈模拟队列(代码动态图解)题目输入格式:输出格式:输入样例:输出样例: 分析题目区分两栈解题思路伪代码动图演示代码测试 题目 题目描述 : 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。 …...

FileUpload控件上传文件时出现 不支持给定路径的格式.的解决方法
正常代码,部署到server 2012时,在上传音频mp3文件时,显示错误“不支持给定路径的格式”,上传控件使用FileUpload控件: 因为程序之前是正常的,因此应该不是程序的问题。 上传时,发现在选择文件时…...
这两天的一些碎碎念
一直以来我都不算是一个非常热爱运维岗位的一个人,其实本行工作对于我来说只是一个工作。运维的广度很大,说什么工作了7年了,可最终总感觉还曾是一窍不通。 什么shell啊,什么python啊,什么大数据啊,7年里&a…...

Unity 最新DOTS系列之《Baking与Baker的详解》
Unity DOTS Baking与Baker详解 最近DOTS终于发布了正式的版本, 我们来分享一下DOTS里面Baking 与Baker的关键概念,方便大家上手学习掌握Unity DOTS开发。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀&…...

【Tensorflow 2.12 简单智能商城商品推荐系统搭建】
Tensorflow 2.12 简单智能商城商品推荐系统搭建 前言架构数据召回排序部署调用结尾 前言 基于 Tensorflow 2.12 搭建一个简单的智能商城商品推荐系统demo~ 主要包含6个部分,首先是简单介绍系统架构,接着是训练数据收集、处理,然后是召回模型、…...

Unity 单例-接口模式
单例-接口模式 使用接口方式实现的单例可以继承其它类,更加方便 using System.Collections; using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; namespace ZYF {public interface ISingleton<TMono> where TMono : M…...

【Java 进阶篇】Java XML解析:从入门到精通
XML(可扩展标记语言)是一种常用的数据格式,用于存储和交换数据。在Java中,XML解析是一项重要的任务,它允许您从XML文档中提取和操作数据。本篇博客将从基础开始,详细介绍如何在Java中解析XML文档࿰…...
【图像配准】Canny边缘检测+模板配准红外可见光双路数据
研究目的 最近在做无人机遥感红外和可见光双路数据配准,由于红外相机视野范围较小,因此配准的目的主要是在可见光的视野范围内,裁剪出红外图像对应的部分,同时,保持可见光的高分辨率不变。 本文思路 本文尝试使用Ca…...
关于单机流程编排技术——docker compose安装使用的问题
最近在学习docker相关的东西,当我在docker上部署了一个nest应用,其中该应用中依赖了一个基于mysql镜像的容器,一个基于redis镜像的容器。那我,当我进行部署上线时,在启动nest容器时,必须保证redis容器和mys…...

Google Chrome的新“IP保护”功能将隐藏用户的IP地址
导语:在保护用户隐私方面,Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址,这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后,Google希望在确保用户隐私的同时&#x…...

做机器视觉工程师,苏州德创能不能去工作?
每一家公司都有自身特点,同时也每一家都有自身的bug。 苏州德创作为美国康耐视Cognex产品在华东最大的代理商,也是康耐视外包团队。那么苏州德创有哪些业务构成,业务的构成也是其招聘的主要人员的方向。 设备视觉供应商,如卓越&…...
交换机基础(二):VLAN 基础知识
一、VLAN 基础知识 虚拟局域网 (Virtual Local Area Network,VLAN) 是一种将局域网设 备从逻辑上划分成一个个网段,从而实现虚拟工作组的数据交换技术。 这一技术主要应用于3层交换机和路由器中,但主流应用还是在3层交换机中。 VLAN 是基于物理网络上构建…...
一个基于Vue3搭建的低代码数据可视化开发平台
JNPF是一个Vue3搭建的低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可完成业务需求。 在JNPF中,至少包含表单建模、流程设计、报表可视化、代码生成器、系统管理、前端UI等组件,这种情况下我们避免了重…...
经验风险最小化与结构风险最小化:优化机器学习模型的两种方法
随着大数据时代的到来,机器学习在各个领域中的应用越来越广泛。然而,在构建机器学习模型时,我们面临着两个主要的挑战:经验风险最小化和结构风险最小化。本文将深入探讨这两种方法,并分析它们在优化机器学习模型中的作…...
Java泛型中的问号是什么意思
通配符概念 因为 List 是泛型类,为了 表示各种泛型 List 的父类,可以使用类型通配符,类型通配符使用问号(?)表示,将一个问号当做类型元素传递个 List,可以表示为 List<?>,意思是 元素类型未知的 List…...

粤嵌实训医疗项目day02(Vue + SpringBoot)
目录 一、创建vue项目并运行 二、vue-cli中的路由使用 三、element-ui框架、实现页面布局以及vue-路由 四、前端登录页面 五、user登录后端接口完善【后端】 六、user登录前端-请求工具-请求发起【前端】 七、请求的跨域-访问策略 八、完善项目的页面布局、导航菜单以及…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...