我需要创建一个ListModel
,它静态包含一个对象(字符串和bool)。
如果我使用追加添加到空的ListModel
元素 - 一切正常。
property ListModel qwe: ListModel {}
var imageToAdd { value: "picture.png", imageType: 1 }
qwe.append({
text: "TextToAdd",
image: imageToADD,
position: 1
})
// This works correct
但我需要静态创建ListModel
,但它不起作用。
ListModel {
ListElement {
text: "TextToAdd"
image: { value: "Qwer.png", imageType: 1 } // <-- This doesn't work
position: 1
}
}
它应该是什么样的?
答案 0 :(得分:7)
Qt中的ListElement
必须包含string
,bool
,numbers
或enum
类型的值。不允许使用更复杂的数据类型,例如hashmaps。
您可以在Qt 5.2源代码中深入阅读:qqmllistmodel.cpp。自Qt 4.7 times以来,这没有改变。
List元素在ListModel定义中定义,并表示a中的项 将使用ListView或Repeater项目显示的列表。
列表元素的定义与其他QML元素类似,但它们包含 一组角色定义而不是属性。使用相同的 语法作为属性定义,角色都定义了数据的访问方式 并包括数据本身。
用于角色的名称必须以小写字母开头,应该是 对给定模型中的所有元素都是通用的。值必须是简单的常量;或 字符串(引用并且可选地在对QT_TR_NOOP的调用中),布尔值 (true,false),数字或枚举值(例如AlignText.AlignHCenter)。
但是,ListModel
似乎能够存储ECMA-262标准中定义的所有类型:基本类型,Undefined
,Null
,Boolean
,Number
和String
以及Object
类型。
编辑:如果您想在QML中创建元素,则必须将代码重写为
ListModel {
ListElement {
text: "TextToAdd"
imageValue: "Qwer.png"
imageType: 1
position: 1
}
}
编辑2:或者你采用Javascript方式。首先创建一个空模型并在开始时填写
ListView {
model: ListModel { id: qwe }
delegate: ...
Component.onCompleted: {
qwe.append({
text: "Image 1",
image: { value: "picture.png", imageType: 1 },
position: 1
});
qwe.append({
text: "Image 2",
image: { value: "picture.png", imageType: 1 },
position: 2
});
qwe.append({
text: "Image 1",
image: { value: "picture.png", imageType: 1 },
position: 3
});
}
}
答案 1 :(得分:2)
model: ListModel {
ListElement {
name: "My Name"
image: ListElement {
src: "My src"
}
}
}
您可以在代理中访问它:
image.get(0).src
我认为您应该可以通过image.src访问它但不起作用......