2013-12-12 31 views
3

我需要创建一个ListModel,静态地包含一个对象(string和bool)。 如果通过使用append将其添加到空ListModel元素 - 一切正常。添加静态对象到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

你有'var imageToADD {value:“picture.png”...}'在你原来的代码中? 'image'是一个未使用的变量。 –

+0

没错,错过了名字。谢谢,编辑 –

回答

5

Qt中甲ListElement必须有string类型,boolnumbersenum的值。更多复杂的数据类型像hashmaps是不允许的。

你可以在Qt 5.2源代码中看到这个内容:qqmllistmodel.cpp。这从Qt 4.7 times以来没有改变。

列表元素的ListModel定义内定义的,并且表示在将使用的ListView或Repeater项被显示的 列表项。

列表元素像其他QML元素来定义,只是它们含有 的角色属性的定义,而不是一个集合。使用与属性定义相同的语法,角色都定义如何访问数据 并包含数据本身。

用于角色的名称必须以小写字母开头,对于给定模型中的所有元素应该是 。值必须是简单的常量;或者 字符串(引用并且可选地在对QT_TR_NOOP的调用中),布尔值 (true,false),数字或枚举值(例如AlignText.AlignHCenter)。

然而,ListModel似乎是能够存储在ECMA-262标准定义的所有类型:原语类型,即UndefinedNullBooleanNumberString以及所述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 
     }); 
    } 
} 
+0

当然,检查我的答案上面的编辑。 –

+0

谢谢你的快速回答,但请检查我的第一篇文章。图像中有2个字段的对象,它与您的示例中不一样。如果我追加到ListModel我的图像对象 - 我可以使用类似于:“ListModelName.get(0).image.value”我需要创建相同的列表模型,但不使用“追加” - 静态创建 –

+0

好吧,如果你不能改变你的数据结构,你必须使用javascript。检查第二个编辑。这是唯一不使用自定义组件的两种解决方案。 –

1
model: ListModel { 
    ListElement { 
     name: "My Name" 
     image: ListElement { 
      src: "My src" 
     } 
    } 
} 

您可以访问它,例如委托:

image.get(0).src 

我会asume你应该能够通过图像来访问它。 src但这不起作用...