第三代软件开发-屏幕保护
[toc]
关键字: 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_lockScreen
anchors.fill: parent
color: "black"
visible: false
MediaPlayer
{
id:media_logo
source: UserProfile.logoVideoPath // 绝对路径
muted: true
loops: MediaPlayer.Infinite
}
VideoOutput
{
id:out_put
anchors.fill: parent
source: media_logo
}
onVisibleChanged:
{
if(visible)
media_logo.play()
else
media_logo.stop()
}
Image {
width: 232
height: 262
anchors.left: parent.left
anchors.top:parent.top
anchors.margins: 50
source: "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 = false
tabview_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: video
width : 800
height : 600
source: "video.avi"
MouseArea {
anchors.fill: parent
onClicked: {
video.play()
}
}
focus: true
Keys.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秒的效果。