QML ListView заполнен JavaScript
-
26-10-2019 - |
Вопрос
Я только что понял, что (согласно некоторому QML Bugreport) есть делегат JSON для ListView. Итак, у меня есть два варианта, заполните его моделью, созданной в JavaScript или C ++
Специально мне нужно загрузить данные.
Я попытался создать массив объектов в JavaScript и push ags array to listview в качестве модели, но он не удался. Независимо от того, как я изменил код.
Так есть ли только решение C ++ или я могу сделать модель ListView от JavaScript?
Спасибо
Код, который я попробовал:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
Проблема была всегда: ReferenceError: Can't find variable: name
Решение
По совету mouli@irc.freenode.net#qt сделайте это:
Файл: gui.qml
import "script.js" as Script
model: ListModel { id: list_model_id }
Файл: script.js
function makeList(id){
id.append({"name":"value1"});
id.append({"name":"value2"});
}
вызов:
Script.makeList(list_model_id)
Другие советы
Это может быть немного поздно, но с QT 5.5 (может быть, раньше, но Testet с 5,5) вы можете сделать следующее:
Предположим, у вас есть такой массив:
var dataArray = [{"name":"A"},{"name":"B"},{"name":"C"}]
Код в QML для отображения этой модели:
ListView {
model: dataArray //the array from above
delegate: Label {
text: dataArray[index].name
}
}
А index
будет предоставлен для делегата. Это индекс текущего элемента внутри модели. Видеть Свойство делегата ListView Чтобы получить больше информации.
Это намного проще в использовании Component.onCompleted
:
model: ListModel {
Component.onCompleted: {
append({"name": "A"});
append({"name": "B"});
append({"name": "C"});
}
}