无法将qml属性初始化为{}

时间:2017-10-08 05:40:52

标签: qml

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))
    }
}

2 个答案:

答案 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

相关问题