ListElements (ListModel) определены в других файлах qml? - PullRequest
1 голос
/ 04 октября 2011

Я получил функциональную ListModel, определенную так:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { icon: "Images/2.png" }
}

Дело в том, что я хотел бы определить ListElement в отдельных файлах qml, но я действительно не знаю, как это сделать ...

Я написал qml следующим образом:

//myWidget.qml
import QtQuick 1.0

ListElement {
    icon: "Images/X.png"
}

Но я не знаю, как "вызвать" или "создать экземпляр" его в моем основном файле ...

Я пытался:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    myWidget //qml file
}

и:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { myWidget }
}

Оба не работают ...

Любая помощь с приветствуется, спасибо заранее.

1 Ответ

2 голосов
/ 08 октября 2011

Я не думаю, что ListElements можно использовать как отдельные файлы.Это потому, что когда вы делаете это, вы неявно создаете Компонент с вашим содержимым внутри (в данном случае ListElement).Однако ListModel может принимать только ListElements в качестве своих дочерних элементов, а не Компоненты с вложенными ListElements внутри.

Однако, чтобы динамически определить элементы модели, вы можете объявить ListModel, а затем добавить свои данные с помощью фрагмента JavaScript.Например, в вашем обработчике Component.onCompleted.

Если вы посмотрите на API для ListModel, вы увидите, что среди прочего у него есть метод append ().Вы можете передать JS словарь этому методу, и он добавит новый ListElement в список и заполнит его свойства в соответствии со словарем.

Пример:

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListView {
        id:list
        anchors.fill: parent
        model: ListModel {
            ListElement { foo: "hello" }
        }
        delegate: Text {
            text: foo
            width: ListView.view.width
        }

        Component.onCompleted: {
            list.model.append({ "foo": "world" })
        }
    }
}

Ваш список появится сдве вещи в нем: "привет" и "мир"

...