QML ListView, заполненный Javascript - PullRequest
8 голосов
/ 28 апреля 2011

Я только что понял, что (согласно некоторым сообщениям об ошибках QML) отсутствует JSON Delegate для ListView. Таким образом, у меня есть два варианта, заполнить его моделью, созданной в Javascript или C ++

Специально мне нужно загрузить данные .json с предварительно определенного URL-адреса и проанализировать их в ListView.

Я пытался создать массив объектов в Javascript и передать массив ассоциаций в ListView как модель, но это не удалось. Независимо от того, как я изменил код.

Так есть только решение C ++ или я могу сделать модель ListView с помощью Javascript?

Спасибо

Код, который я пробовал:

return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]

Проблема всегда была: ReferenceError: Can't find variable: name

Ответы [ 3 ]

19 голосов
/ 28 апреля 2011

По совету 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)
9 голосов
/ 09 июля 2015

Это может быть немного поздно, но с Qt 5.5 (возможно, раньше, но тестирование с 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 для получения дополнительной информации.

6 голосов
/ 08 февраля 2014

Гораздо проще использовать Component.onCompleted:

model: ListModel {
    Component.onCompleted: {
        append({"name": "A"});
        append({"name": "B"});
        append({"name": "C"});
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...