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))
}
}
答案 0 :(得分:3)
您可以参考Qt documentation:
QML语法定义属性值初始化赋值右侧的花括号表示绑定赋值。初始化var属性时可能会造成混淆,因为JavaScript中的空花括号可以表示表达式块或空对象声明。如果您希望将var属性初始化为空对象值,则应将大括号括在括号中。
因此,在使用property var a: {}
时,花括号被解释为空表达式,其结果未定义。
使用property var a: ({})
语法,您将创建一个空的JS对象。您可以添加属性和方法,但只有一组属性,它将完全像字典。
您可以通过两种方式访问对象属性:
objectName.propertyName
objectName["propertyName"]
您可以在此处找到有关JS对象的更多信息:link。
答案 1 :(得分:0)
它必须是qml语法问题。解决方法就是说
property variant a: ( {} )
如问题中所述, 工作
property variant a { "somekey": value }
......没有括号。
是否有人知道qml如何解释未经修饰的“{}”,以及为什么会导致undefined
?