QML错误集成在javascript哈希映射中?

时间:2014-11-10 22:45:16

标签: javascript qml

我今晚发现了一个问题,我想知道这是键盘和屏幕之间的错误还是QML / javascript集成问题。

以下是我的例子:

var myHash = {}

for (var i=0; i<3; ++i) {
    var newObject = Qt.createQmlObject('import QtQuick 2.3; Rectangle {color: "red"; width: 20; height: 40}', main, "test")
    console.log(newObject.color)
    myHash[newObject] = i
}

for (var key in myHash) {
    console.log("Object type:" + key)
    console.log("Color: " + key.color)
}

输出结果为:

qml: Initial color: #ff0000
qml: Initial color: #ff0000
qml: Initial color: #ff0000
qml: Object type:QQuickRectangle(0x98e9ac8)
qml: Color: undefined
qml: Object type:QQuickRectangle(0x98da7a0)
qml: Color: undefined
qml: Object type:QQuickRectangle(0x970b328)
qml: Color: undefined

因此,当我将我的QML对象存储在哈希映射myHash中作为键时,QML保留了对象类型,但忘记了属性?

1 个答案:

答案 0 :(得分:0)

问题是JavaScript对象与Map[String, Any]最接近 - 所以你不是将对象newObject存储为myHash中的键,而是调用{toValue的结果在toString上{1}} / newObject

解决方案是将newObject存储为值,并使用其他内容作为密钥:

var myHash = {}

for (var i=0; i<3; ++i) {
    var newObject = Qt.createQmlObject('import QtQuick 2.3; Rectangle {color: "red"; width: 20; height: 40}', main, "test")
    console.log(newObject.color)
    myHash["key_" + i] = newObject;
}

for (var key in myHash) {
    console.log("Object entry:" + key)
    console.log("Color: " + myHash[key].color)
}