提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|行业资讯|编辑:鲍佳佳|2021-01-20 10:20:52.810|阅读 105 次
概述:本文主要讲述一个QML时钟应用程序,它演示了使用ListView类型来显示ListModel生成的数据,以及使用SpringAnimation类型来制作图像动画。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
Qt是用于台式机,嵌入式和移动设备的跨平台应用程序开发框架。Qt本身不是一门编程语言。它是一个用C++编写的框架。一个预处理器,MOC(Meta-Object Compiler,元对象编译器),被用来扩展C++语言的功能,比如信号和插槽。在编译步骤之前,MOC解析用Qt-extended C++编写的源文件,并从中生成符合标准的C++源文件。因此,框架本身和使用它的应用程序/库可以被任何标准兼容的C++编译器编译,如Clang、GCC、ICC、MinGW和MSVC。
一个QML时钟应用程序,它演示了使用ListView类型来显示ListModel生成的数据,以及使用SpringAnimation类型来制作图像动画。
Clocks演示了使用ListView类型来显示ListModel生成的数据。模型所使用的委托人被指定为自定义的QML类型,该类型在Clock.qml文件中被指定。
JavaScript方法被用来获取不同时区的几个城市的当前时间,QML类型被用来在钟面上用动画时钟指针显示时间。
运行示例
要从Qt Creator中运行该示例,请打开欢迎模式并从示例中选择该示例。如需了解更多信息,请访问构建和运行示例。
显示由列表模型生成的数据
在clocks.qml文件中,我们使用Rectangle类型来创建应用程序主窗口。
Rectangle { id: root width: 640; height: 320 color: "#646464"
我们使用ListView类型来显示ListModel类型提供的项目列表。
ListView { id: clockview anchors.fill: parent orientation: ListView.Horizontal cacheBuffer: 2000 snapMode: ListView.SnapOneItem highlightRangeMode: ListView.ApplyRange delegate: Content.Clock { city: cityName; shift: timeShift } model: ListModel { ListElement { cityName: "New York"; timeShift: -4 } ListElement { cityName: "London"; timeShift: 0 } ListElement { cityName: "Oslo"; timeShift: 1 } ListElement { cityName: "Mumbai"; timeShift: 5.5 } ListElement { cityName: "Tokyo"; timeShift: 9 } ListElement { cityName: "Brisbane"; timeShift: 10 } ListElement { cityName: "Los Angeles"; timeShift: -8 } } }
列表元素的定义与其他QML类型一样,只是它们包含角色定义而不是属性的集合。角色既定义如何访问数据,又包括数据本身。
对于每个列表元素,我们使用cityName角色指定城市名称,并使用timeShift角色指定时区,以相对UTC(协调世界时)的正负偏移。
时钟自定义类型被用作ListView中的delegate,定义的列表项目的视觉外观。要使用Clock类型,我们添加了一条import语句,用于导入名为content类型所在位置的文件夹:
import "content" as Content
我们使用图像类型显示箭头,以指示用户是否可以轻拂视图以在左侧或右侧看到更多时钟:
Image { anchors.left: parent.left anchors.bottom: parent.bottom anchors.margins: 10 source: "content/arrow.png" rotation: -90 opacity: clockview.atXBeginning ? 0 : 0.5 Behavior on opacity { NumberAnimation { duration: 500 } } } Image { anchors.right: parent.right anchors.bottom: parent.bottom anchors.margins: 10 source: "content/arrow.png" rotation: 90 opacity: clockview.atXEnd ? 0 : 0.5 Behavior on opacity { NumberAnimation { duration: 500 } } } }
opacity当列表视图位于x轴的起点或终点时,我们使用该属性隐藏箭头。
在Clock.qml中,我们定义了一个timeChanged()函数,其中我们使用JavaScriptDate对象中的方法来获取UTC中的当前时间并将其调整为正确的时区:
function timeChanged() { var date = new Date; hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours() night = ( hours < 7 || hours > 19 ) minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes() seconds = date.getUTCSeconds(); }
我们使用Timer类型以100毫秒的间隔更新时间:
Timer { interval: 100; running: true; repeat: true; onTriggered: clock.timeChanged() }
我们在项目类型中使用图像类型在模拟时钟面上显示时间。白天和晚上使用不同的图像:
Item { anchors.centerIn: parent width: 200; height: 240 Image { id: background; source: "clock.png"; visible: clock.night == false } Image { source: "clock-night.png"; visible: clock.night == true }
应用于图像类型的旋转变换提供了一种旋转时钟指针的方法。原点属性持有相对于父点固定的点,当项目的其余部分旋转时。角度属性决定了以顺时针为单位旋转指针的角度。
Image { x: 92.5; y: 27 source: "hour.png" transform: Rotation { id: hourRotation origin.x: 7.5; origin.y: 73; angle: (clock.hours * 30) + (clock.minutes * 0.5) Behavior on angle { SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } } } } Image { x: 93.5; y: 17 source: "minute.png" transform: Rotation { id: minuteRotation origin.x: 6.5; origin.y: 83; angle: clock.minutes * 6 Behavior on angle { SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } } } } Image { x: 97.5; y: 20 source: "second.png" transform: Rotation { id: secondRotation origin.x: 2.5; origin.y: 80; angle: clock.seconds * 6 Behavior on angle { SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } } } } Image { anchors.centerIn: background; source: "center.png" }
当时间更改时,我们在属性上使用行为类型angle来应用SpringAnimation。的spring和damping特性使所述时钟指针的弹簧状运动,和一个modulus的360使动画目标值环绕在一个完整的圆。
我们使用文本类型在时钟下方显示城市名称:
Text { id: cityLabel y: 210; anchors.horizontalCenter: parent.horizontalCenter color: "white" font.family: "Helvetica" font.bold: true; font.pixelSize: 16 style: Text.Raised; styleColor: "black" }
Qt常用组件:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢