如何在QML中声明列表属性



如何在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,因为它是类型化的。

相关内容

  • 没有找到相关文章

最新更新