javascript哈希映射中的QML集成错误

QML wrong integration in javascript hashmaps?

本文关键字:QML 集成 错误 哈希 映射 javascript      更新时间:2023-09-26

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

问题是JavaScript对象与Map[String, Any]最相似,因此您不是将对象newObject作为关键字存储在myHash中,而是在newObject上调用toValue/toString的结果。

解决方案是将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)
}