Вопрос

Я только что понял, что (согласно некоторому 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"});
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top