我正在尝试创建一个列表,并将其值附加到从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 ++中实现自己的模型。