Как объявить свойство списка в QML

Как объявить свойство списка в QML (для использования с Qt.labs.settings в моем случае):

Settings {
    property list recentFiles: []
}

Не работает. Я пробовал много других опций: list<string>, string[] и т.д. Нет, похоже, работает.

Ответ 2

Список может хранить только объекты QML и не может содержать базовый тип Значения

строка - это базовый тип, поэтому вы не можете сохранить его в списке. Для этого вам лучше использовать property var recentFiles

Ответ 3

Так как вы спрашивали о свойстве 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.

И документация для "list" гласит [1]:

"Список может хранить только объекты QML и не может содержать никаких значений базовых типов. (Чтобы хранить базовые типы в списке, используйте вместо этого тип var.)"

Таким образом, следующее не будет компилироваться:

property list<int> intList: []

Те же документы также говорят:

"Примечание. Тип списка не рекомендуется использовать в качестве типа для пользовательских свойств. Вместо этого следует использовать тип var для этой цели, поскольку списки, хранящиеся в типе var, можно обрабатывать с большей гибкостью из QML".

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