当前位置: 首页 > 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}}}
}

 

http://www.xdnf.cn/news/447607.html

相关文章:

  • 【Linux】掌握 setsid:让进程脱离终端独立运行
  • 三种映射方式总结
  • 第二十九节:直方图处理-直方图均衡化
  • ET ProcessInnerSender类(实体) 分析
  • ultralytics中tasks.py---parse_model函数解析
  • 求助求助,重金酬谢
  • Java知识框架
  • AIGC与数字媒体实验室解决方案分享
  • Jmeter对服务端进行压测快速上手
  • 【电路笔记 通信】8B/10B编码 高速数据传输的串行数据编码技术 论文第三部分 The 8B/10B coding map
  • HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera
  • OpenCV CUDA 模块中用于在 GPU 上计算两个数组对应元素差值的绝对值函数absdiff(
  • Flutter 开发入门:从一个简单的计数器应用开始
  • 操作系统-物理结构
  • 【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
  • MCP:开启AI的“万物互联”时代
  • 网站安全防御
  • 北斗导航 | 接收机自主完好性监测算法综述,1980至2025年(原理,公式,代码)
  • Java版OA管理系统源码 手机版OA系统源码
  • 深入理解卷积神经网络:从基础原理到实战应用
  • 硕士论文用YOLO可以毕业吗?
  • 记录算法笔记(20025.5.14)对称二叉树
  • 码题集——魔数、A的B次方、网球比赛、三角形、点与线段的关系
  • libmemcached库api接口讲解五
  • Java Queue 接口实现
  • 【经验分享】Dify+GraphRAG实现知识图谱智能问答
  • QMK键盘编码器(Encoder)(理论部分)
  • Unity Image组件无法阻挡手势的解决办法
  • 如何在运行不同操作系统的计算机上轻松擦除U盘
  • 【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略