我需要创建一个ListModel,它静态地包含一个对象(字符串和bool )。如果我通过使用append添加到空的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
}
}它应该是什么样的?
发布于 2013-12-15 01:12:20
Qt中的ListElement必须具有string、bool、numbers或enum类型的值。不允许使用更复杂的数据类型,如hashmap。
您可以在Qt5.2源代码:qqmllistmodel.cpp中深入阅读这一内容。自从Qt 4.7次发布以来,这种情况并没有改变。
List元素在ListModel定义中定义,并表示将使用ListView或Repeater项显示的列表中的项。 List元素的定义与其他QML元素一样,只是它们包含一个角色定义的集合,而不是属性。使用与属性定义相同的语法,角色既定义如何访问数据,又包括数据本身。 用于角色的名称必须以小写字母开头,并且对于给定模型中的所有元素都应该是通用的。值必须是简单常量;字符串(引用并可选在调用QT_TR_NOOP中)、布尔值(真、假)、数字或枚举值(如AlignText.AlignHCenter)。
然而,ListModel似乎能够存储ECMA-262标准中定义的所有类型:原语类型,即Undefined、Null、Boolean、Number和String以及Object类型。
编辑:如果您想要在QML中创建元素,您必须重写代码如下
ListModel {
ListElement {
text: "TextToAdd"
imageValue: "Qwer.png"
imageType: 1
position: 1
}
}Edit2:或者你按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
});
}
}发布于 2016-01-29 16:03:00
model: ListModel {
ListElement {
name: "My Name"
image: ListElement {
src: "My src"
}
}
}例如,您可以在委托中访问它:
image.get(0).src我想你应该可以通过image.src访问它,但这不起作用.
https://stackoverflow.com/questions/20537417
复制相似问题