QML ListView заполняется Javascript
Я только что понял, что (согласно некоторому QML Bugreport) отсутствует делегат JSON для ListView. Поэтому у меня есть два варианта: заполнить его моделью, созданной на Javascript или C++
специально мне нужно скачать .данные json из предопределенного URL и анализируют их в ListView.
Я попытался создать массив объектов в Javascript и нажать массив assoc в ListView в качестве модели, но это не удалось. Независимо от того, как я изменил код.
Итак, есть только решение c++ или I можно сделать модель ListView с помощью Javascript?
спасибо
код, который я пробовал:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
этот вопрос всегда был: ReferenceError: Can't find variable: name
3 ответов
из-за Совета от mouli@irc.freenode.net#qt сделайте это:
: графический интерфейс.в QMLimport "script.js" as Script
model: ListModel { id: list_model_id }
: сценарий.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"});
}
}