首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向ListModel添加静态对象

向ListModel添加静态对象
EN

Stack Overflow用户
提问于 2013-12-12 07:25:28
回答 2查看 5.4K关注 0票数 6

我需要创建一个ListModel,它静态地包含一个对象(字符串和bool )。如果我通过使用append添加到空的ListModel元素,那么所有操作都很好。

代码语言:javascript
复制
property ListModel qwe: ListModel {}
var imageToAdd { value: "picture.png", imageType: 1 }

qwe.append({
    text: "TextToAdd",
    image: imageToADD,
    position: 1
})
// This works correct

但是我需要静态地创建ListModel,但是它不起作用。

代码语言:javascript
复制
ListModel {
    ListElement {
        text: "TextToAdd"
        image: { value: "Qwer.png", imageType: 1 }  // <-- This doesn't work
        position: 1
    }
}

它应该是什么样的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-15 01:12:20

Qt中的ListElement必须具有stringboolnumbersenum类型的值。不允许使用更复杂的数据类型,如hashmap。

您可以在Qt5.2源代码:qqmllistmodel.cpp中深入阅读这一内容。自从Qt 4.7次发布以来,这种情况并没有改变。

List元素在ListModel定义中定义,并表示将使用ListView或Repeater项显示的列表中的项。 List元素的定义与其他QML元素一样,只是它们包含一个角色定义的集合,而不是属性。使用与属性定义相同的语法,角色既定义如何访问数据,又包括数据本身。 用于角色的名称必须以小写字母开头,并且对于给定模型中的所有元素都应该是通用的。值必须是简单常量;字符串(引用并可选在调用QT_TR_NOOP中)、布尔值(真、假)、数字或枚举值(如AlignText.AlignHCenter)。

然而,ListModel似乎能够存储ECMA-262标准中定义的所有类型:原语类型,即UndefinedNullBooleanNumberString以及Object类型。

编辑:如果您想要在QML中创建元素,您必须重写代码如下

代码语言:javascript
复制
ListModel {
    ListElement {
        text: "TextToAdd"
        imageValue: "Qwer.png"
        imageType: 1
        position: 1
    }
}

Edit2:或者你按Javascript的方式走。首先创建一个空模型,然后在开始时填充它

代码语言: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
        });
    }
}
票数 8
EN

Stack Overflow用户

发布于 2016-01-29 16:03:00

代码语言:javascript
复制
model: ListModel {
    ListElement {
        name: "My Name"
        image: ListElement {
            src: "My src"
        }
    }
}

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

代码语言:javascript
复制
image.get(0).src

我想你应该可以通过image.src访问它,但这不起作用.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20537417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档