将静态对象添加到ListModel

时间:2013-12-12 07:25:28

标签: qml qtquick2

我需要创建一个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
    }
}

它应该是什么样的?

2 个答案:

答案 0 :(得分:7)

Qt中的ListElement必须包含stringboolnumbersenum类型的值。不允许使用更复杂的数据类型,例如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标准中定义的所有类型:基本类型,UndefinedNullBooleanNumberString以及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访问它但不起作用......