我今晚发现了一个问题,我想知道这是键盘和屏幕之间的错误还是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保留了对象类型,但忘记了属性?
答案 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)
}