如何在QML中声明列表属性

时间:2014-11-04 10:37:44

标签: qt qml qt5 qtquick2

如何在QML中声明list属性(在我的情况下与Qt.labs.settings一起使用):

Settings {
    property list recentFiles: []
}

不起作用。我尝试了很多其他选项:list<string>string[]等。似乎无效。

2 个答案:

答案 0 :(得分:7)

Settings {
    property var recentFiles: []
}

http://doc.qt.io/qt-5/qml-var.html

答案 1 :(得分:0)

由于您要询问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类型,因为可以在QML中更灵活地操作由var类型存储的列表。”

[1] https://doc.qt.io/qt-5/qml-list.html