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 сделайте это:

: графический интерфейс.в QML
import "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"});
    }
}