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

Qml自定义组件之车辆风扇展示

上面表示空调系统,有风在吹动,可以调节风速和风向

实现思路:

1、让美工准备风吹动效果的多张png图片,如下,且名称按顺序命名好:

2、利用Image元素显示这些图片

3、利用Timer定时器元素不停的切换Image元素的显示的图片,从而出现动图的效果

4、缩短定时器的超时间隔,则图片显示切换加快,则风速加快。拉长定时器的超时间隔,则图片显示切换变慢,则风速变慢

5、利用transform属性,让他绕着x轴旋转,来模拟风向的变化

6、当然也可以用AnimatedImage元素直接显示动图,但动图需要是webp格式的高清动图,gif格式的会很糊

代码如下:

先是自定义的Wind组件

import QtQuick
import QtQuick.ControlsItem {//暴露属性:总帧数,即显示多少张图片property int frameCnt:10//暴露属性:播放速度,大于1则加快,小于1则变慢property double speed: 1//组件生成时开启定时器Component.onCompleted: {timer.start()}Image {id: img//声明属性当前帧property int currentFrame: 0anchors.fill: parent//图片文件的命名和当前帧绑定source: "./wind/wind_"+currentFrame+".png"fillMode: Image.PreserveAspectFit}//通过定时器不停的变更图片当前显示的画面Timer{id:timer//间隔越小,则速度越快,默认1000/30ms为正常速度(即30帧/秒)//绑定speed,speed大于1,则间隔变短,画面切换越快interval: 1000/30/speedrepeat: true;//每次超时时更新当前帧,则图片源也会跟着变化,则实现了动图的显示onTriggered: {if(img.currentFrame<frameCnt-1){img.currentFrame++}else{img.currentFrame=0;}}}}

然后使用

import QtQuick
import QtQuick.ControlsWindow {id:rootwidth: 640height: 480visible: truetitle: qsTr("Hello World")Rectangle{id:rectanchors.fill: parentcolor: "black"Wind{width: 200height: 200anchors.centerIn: parentframeCnt: 145speed: s2.value//绑定风速滑动条的值,滑动条一变化,则播放速度就会变化//利用变换,绕着x轴上下旋转。模拟风向的变化transform: [Rotation{angle:s1.value//角度绑定风向滑动条的值,滑动条一变化,则风向就会变化origin.x:width/2origin.y:0axis.x:1//绕着x轴旋转axis.y:0axis.z:0}]}//调整风向的滑动条Column{spacing: 10anchors.left: rect.leftanchors.leftMargin: 20anchors.verticalCenter: rect.verticalCenterLabel{id:lbl1text: "Y"font.family: "Microsoft Yahei"color: "white"}Slider{id:s1anchors.horizontalCenter: lbl1.horizontalCenterwidth: 50height: 200from: -20to:180value: 80orientation: Qt.Vertical}}//调整风速的滑动条Row{id:rowspacing: 10anchors.bottom: rect.bottomanchors.bottomMargin: 20anchors.horizontalCenter: rect.horizontalCenterLabel{id:lbl2text: "风速"font.family: "Microsoft Yahei"color: "white"anchors.bottom: row.bottom}Slider{id:s2anchors.verticalCenter:  lbl2.verticalCenterwidth: 200height: 50stepSize: 0.1from: 0to:5value: 1orientation: Qt.Horizontal}}}
}

 

相关文章:

  • TypeScript装饰器:从入门到精通
  • PyTorch中mean(dim=1)的深度解析
  • k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • 计算机视觉最不卷的方向:三维重建学习路线梳理
  • 分布式2(Zookeeper )
  • ubuntu 22.04 wifi网卡配置地址上网
  • OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试
  • 常见排序算法及其java实现
  • Redis缓存穿透、雪崩、击穿的解决方案?
  • 基于OpenCV中的图像拼接方法详解
  • Python----神经网络(《Searching for MobileNetV3》论文概括和MobileNetV3网络)
  • 前端安全:XSS、CSRF 防御与最佳实践
  • 【漫话机器学习系列】259.神经网络参数的初始化(Initialization Of Neural Network Parameters)
  • AI与机器学习深度集成:从设备端能力爆发到开发工具智能化
  • C++笔记-AVL树(包括单旋和双旋等)
  • 比亚迪固态电池突破:王传福的技术哲学与产业重构|创客匠人热点评述
  • 第29节:现代CNN架构-Inception系列模型
  • 深度学习中的查全率与查准率:如何实现有效权衡
  • 在RAG中 如何提高向量搜索的准确性?
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 图讯丨习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 淡马锡辟谣:淡马锡和太白投资未在中国销售任何投资产品或金融工具
  • 伊朗外长称正与美国进行“善意”的会谈
  • 傅利叶提出下个十年战略,CEO顾捷:机器人要有温度,要用实际价值来定义形态
  • 印方称所有敌对行动均得到反击和回应,不会升级冲突