QML中如何存储整型键值对以关联开关状态与对应旋转角度?
QML存储整型键值对的简洁方案
QML 原生支持通过 var 类型属性直接存储 JS 风格的键值对象,完全兼容后续 JS 代码操作,你需要的写法可以直接改成如下可运行形式:
Item { id: parentWheelSwitch property int status: 0 // 注意对象字面量外层要加括号,避免QML解析器将大括号识别为代码块 property var posMap: ({ 1: 30, 2: 15, 0: 0, 3: -15, 4: -30, 5: -45, 6: -75 }) }
使用时直接按照JS对象的方式取值即可,比如获取当前status对应的角度:
var currentAngle = parentWheelSwitch.posMap[parentWheelSwitch.status]
你也可以正常对这个对象做增删改查操作,和普通JS对象没有区别。
针对你的具体场景还有更简化的方案:你的状态键是0~6连续的整型,直接用数组存储性能更好,写法更简洁:
Item { id: parentWheelSwitch property int status: 0 // 数组下标对应状态值,值对应角度 property var posArr: [0, 30, 15, -15, -30, -45, -75] }
取值时直接写 parentWheelSwitch.posArr[parentWheelSwitch.status] 即可。
如果不需要在运行时修改这个映射关系,可以用Object.freeze()包裹对象/数组,避免误修改:
property var posMap: Object.freeze({ 1: 30, 2: 15, 0: 0, 3: -15, 4: -30, 5: -45, 6: -75 })
内容的提问来源于stack exchange,提问作者rustyBucketBay
相关产品推荐
相关产品推荐

