如何在QML中声明列表属性

Tim*_*mmm 10 qt qml qt5 qtquick2

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

Settings {
    property list recentFiles: []
}
Run Code Online (Sandbox Code Playgroud)

不行.我尝试过许多其他选项:list<string>,string[],等无似乎工作.

gat*_*lis 10

由于您询问的是 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)
}
Run Code Online (Sandbox Code Playgroud)

这将打印

qml: length: 2
qml: length: 3
Run Code Online (Sandbox Code Playgroud)

但我看到 'rectList' 也会接受以下内容:

MouseArea { id: mArea; }
..
rectList.push(mArea)
Run Code Online (Sandbox Code Playgroud)

这没有意义。并且命令建议/自动完成在 Qt Creator 中不适用于此语法。我猜这是某种遗留语法,不应在新应用程序中使用。您应该改用其他答案所建议的内容:

属性 var myList: []

然后你会得到 Qt Creator 更好的支持。

“列表”的文档说 [1]:

“列表只能存储 QML 对象,不能包含任何基本类型值。(要在列表中存储基本类型,请改用 var 类型。)”

所以以下不会编译:

property list<int> intList: []
Run Code Online (Sandbox Code Playgroud)

相同的文档还说:

“注意:不建议将列表类型作为自定义属性的类型。为此应使用 var 类型,因为可以在 QML 中以更大的灵活性操作由 var 类型存储的列表。”

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


fat*_*fat 7

Settings {
    property var recentFiles: []
}
Run Code Online (Sandbox Code Playgroud)

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

  • 它有效,谢谢。关键字“list”有什么用? (2认同)

Art*_*sev 7

列表只能存储 QML 对象,不能包含任何基本类型值

string是一种基本类型,因此您不能将其存储在列表中。为此,你最好使用property var recentFiles