如何在QML中声明列表属性(在本例中用于Qt.labs.settings
):
Settings {
property list recentFiles: []
}
不起作用。我尝试了许多其他选项:list<string>
、string[]
等。似乎都不起作用。
Settings {
property var recentFiles: []
}
http://doc.qt.io/qt-5/qml-var.html
由于您询问了list属性('list'关键字),因此以下语法似乎有效:
property list<Rectangle> rectList: [
Rectangle { id: a; },
Rectangle { id: b; }
]
Rectangle { id: c }
Component.onCompleted: {
console.log("length: " + rectList.length)
rectList.push(c)
console.log("length: " + rectList.length)
}
这将打印
qml: length: 2
qml: length: 3
但我看到"rectList"也会接受以下内容:
MouseArea { id: mArea; }
..
rectList.push(mArea)
这没有道理。命令建议/自动完成在Qt Creator中不适用于此语法。我想这是某种遗留语法,不应该在新的应用程序中使用。你应该使用其他答案建议的内容:
属性var myList:[]
然后你会得到Qt Creator更好的支持。
"列表"的文档说明[1]:
列表只能存储QML对象,不能包含任何基本类型值。(要在列表中存储基本类型,请使用var类型。)
因此以下内容不会编译:
property list<int> intList: []
同样的文件也说:
"注意:不建议将列表类型作为自定义属性的类型。应将var类型用于此目的,因为var类型存储的列表可以在QML中以更大的灵活性进行操作。"
[1]https://doc.qt.io/qt-5/qml-list.html
列表只能存储QML对象,不能包含任何基本类型值
string是一个基本类型,所以不能将其存储在列表中。为此,您最好使用property var recentFiles
列表当前只接受对象类型。int是一种值类型。在可能的情况下,list应该优先于var,因为它是类型化的。