QML 在运行时检查属性的类型

问题描述 投票:0回答:1

我正在尝试在运行时检查属性的类型:

Node {
    id: root

    property string foo
    property color diffuseColor
    ...
}

(因为我是从像

{foo: "bar", diffuseColor: [0.5, 1, 0]}
这样的JS对象动态设置它的,只是颜色以不兼容的格式给出,所以简单的分配是行不通的。

我需要这样的代码:

var targetObject = ... // the QML object
for(var k in jsobj) {
    if(isColorProperty(targetObject[k]))
        targetObject[k] = Qt.rgba(jsobj[k][0], jsobj[k][1], jsobj[k][2], 1)
    else
        targetObject[k] = jsobj[k]
}

为了实现

isColorProperty()
,我尝试了许多不同的方法,例如使用
instanceof
(类型错误),检查
Object.getPrototypeOf
结果(类型错误),使用
.toString()
(仅返回HTML颜色字符串),'typeof' (返回“对象”)这些都不起作用。

javascript qml
1个回答
0
投票

解决方案是使用

pragma ValueTypeBehavior: Addressable

使用此编译指示,除其他外,可以使用

instanceof
检查值类型,例如:

root.foo instanceof color // true
© www.soinside.com 2019 - 2024. All rights reserved.