我正在尝试创建一个列表,并将其值附加到从xml http请求中检索到的列表中。我只测试了一个值为typeAssetProcess的文本块,它可以正常打印,但是当我开始尝试使用列表时,一切开始中断。我在做什么错,我该如何解决?

import QtQuick 2.0
import "../controls" as Controls
Item {

Column {
    id: column

    width: parent.width
    height: parent.height
}

ListView {
    id: listView

    width: parent.width
    height: parent.height
    model: ListModel {
        ListElement {
            name: qstr("Proccess: %1").arg(typeAssetProcess)
            colorCode: "grey"
        }

        ListElement {
            name: "Red"
            colorCode: "red"
        }

        ListElement {
            name: "Blue"
            colorCode: "blue"
        }

        ListElement {
            name: "Green"
            colorCode: "green"
        }
    }
    delegate: Item {
        x: 5
        width: 80
        height: 40
        Row {
            id: row1
            Rectangle {
                width: 40
                height: 40
                color: colorCode
            }

            Text {
                text: name
                font.bold: true
                anchors.verticalCenter: parent.verticalCenter
            }
            spacing: 10
        }
    }
}

}


这段代码令人震惊:

ListElement {
    name: qstr("Proccess: %1").arg(typeAssetProcess)
    colorCode: "grey"
}

最佳答案

这是对ListElement类型的已知限制,其中包含“角色定义而不是属性的集合”。这就是为什么您不能为这些角色使用脚本或属性绑定的原因(否则会出现错误ListElement: cannot use script for property value)。

Qt团队经常要求进行改进,但据我所知尚无实施方案。

您可以做的一件事是动态初始化模型,而不是使用固定的ListElement

ListView {
    id: listView

    readonly property var modelElements: [
        {
            name: qsTr("Proccess: %1").arg(typeAssetProcess),
            colorCode: "grey"
        },
        {
            name: "Red",
            colorCode: "red"
        },
        {
            name: "blue",
            colorCode: "blue"
        },
        {
            name: "Green",
            colorCode: "green"
        }]

    Component.onCompleted: {
        modelElements.forEach(function(element) {
            model.append(element)
        })
    }

    width: parent.width
    height: parent.height
    model: ListModel {}
    delegate: ...
}


您也可以选择在C ++中实现自己的模型。

09-25 20:43