property variant a: {}
似乎不起作用。 a最终是未定义的,而不是一个空字典。
我对 Javascript 不太有经验...初始化属性以保存空字典的正确方法是什么?
以下 qml 在控制台上打印“qrc:/main.qml:13: TypeError: Type error”。但是,如果a被初始化为,比如说{"dummyentry": 42},那么就会记录预期的结果。
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
ApplicationWindow {
visible: true; width: 600; height: 200
property variant a: {}
Component.onCompleted: {
console.log("initial a="+JSON.stringify(a)) // TypeError: Type error
a["newkey"] = 999 // gets "TypeError: Type error"
console.log("updated a="+JSON.stringify(a))
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以参考Qt文档:
QML 语法定义属性值初始化赋值右侧的花括号表示绑定赋值。在初始化 var 属性时,这可能会令人困惑,因为 JavaScript 中的空花括号可以表示表达式块或空对象声明。如果您希望将 var 属性初始化为空对象值,则应将花括号括在括号中。
因此,当使用 时property var a: {},花括号被解释为空表达式,其结果是未定义的。
使用该property var a: ({})语法,您将创建一个空的 JS 对象。您可以向其中添加属性和方法,但只需一组属性,它就可以像字典一样工作。
您可以通过两种方式访问对象属性:
objectName.propertyName
objectName["propertyName"]
Run Code Online (Sandbox Code Playgroud)
在这里您可以找到有关 JS 对象的更多信息:链接。