动态创建QML ListElement和内容

iQt*_*iQt 10 qt qml

所以我试图在一个动态创建ListElements ListModel.这工作正常,直到我尝试在ListElements中编写一些动态加载的内容.

我尝试使用ListElement内部和小时作为属性创建一个自己的文件,但模型然后我得到一个错误,说ListElements不能嵌套.

运行以下代码的错误是:

无法分配给不存在的属性"小时"

我怎么解决这个问题?

码:

import QtQuick 2.0

ListModel
{
    id: listModel

    Component.onCompleted:
    {
        for (var i = 0; i < 24; i++)
        {
            var object = createListElement(listModel)
        }
    }

    function createListElement(parent)
    {
        var object = Qt.createQmlObject('import QtQuick 2.0; ListElement { hour: "01" }', parent);

        return object;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑: 将函数中的代码行更改为:

var object = Qt.createQmlObject('import QtQuick 2.0; ListElement { property string hour: "23" }', parent);
Run Code Online (Sandbox Code Playgroud)

现在我没有错误,但元素仍未显示在列表中.

解:

import QtQuick 2.0

ListModel
{
    id: listModel

    Component.onCompleted:
    {
        for (var i = 0; i < 24; i++)
        {
            var object = createListElement(listModel)
        }
    }

    function createListElement(parent)
    {
        var object = Qt.createQmlObject('import QtQuick 2.0; ListElement { hour: "01" }', parent);

        return object;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mit*_*tch 12

我不确定为什么这不起作用,但使用普通的旧JavaScript对象可以完成这项工作:

import QtQuick 2.4
import QtQuick.Window 2.0

Window {
    width: 400
    height: 400

    ListView {
        id: listView
        anchors.fill: parent
        model: listModel
        delegate: Rectangle {
            width: listView.width
            height: listView.height / 4

            Text {
                text: hour
                anchors.centerIn: parent
            }
        }
    }

    ListModel {
        id: listModel

        Component.onCompleted: {
            for (var i = 0; i < 24; i++) {
                append(createListElement());
            }
        }

        function createListElement() {
            return {
                hour: "01"
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)