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

jim*_*mav 2 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))
    }
}
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 对象的更多信息:链接