首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ListModel中传递数组

在ListModel中传递数组
EN

Stack Overflow用户
提问于 2017-07-18 03:18:44
回答 2查看 5K关注 0票数 3

我想知道如何在ListModel中传递数组?

好的,在QML中,我有一个ListView,我将它设置为ListModel,如下所示:

代码语言:javascript
运行
复制
model: ListModel
{
    id: myList   
    ListElement 
    {
        name: ""
        card: 0
        books: []
    }

}

我可以通过以下方式追加:

代码语言:javascript
运行
复制
myList.append({name:"terry", card:00100, books:["024589","865976","879582","215645"]}); 

但是当我试图在屏幕上输出它时,我得到了这个。

代码语言:javascript
运行
复制
{
    "card": 00100
    "books": {
        "objectName": "",
        "count": 4,
        "dynamicRoles": false
     },
    "name": "terry",
    "name": "terry"
}

我不知道为什么我有两个名字!如何才能获得图书的价值?

我查阅了ListModelListElement的QML文档,找不到任何与传递数组有关的内容,所有示例都是整数或字符串。

你知道我怎么才能得到约会吗?

我使用DelegateComponent.onCompleted:{}调用数组来解决这个问题,但是我认为这不是一种好的/正确的方法,因为代表不负责保存数据,应该在Model中完成,如果我错了,请纠正我。

耽误您时间,实在对不起。

Edit01:,谢谢您的回复,下面是我需要数组的原因:我在代表中有一个ComboBox,如下所示:

代码语言:javascript
运行
复制
delegate: Rectangle
    {
     id: rowID
     width: 50
     height: 40
     color: "#323232"
     Row
     {
         anchors.fill: parent
         anchors.leftMargin: 10
         anchors.rightMargin: 10
         Label{
             id: nameID
             text: name
             font.pixelSize: 12
             width: 200
             wrapMode: Text.WrapAnywhere
             anchors.verticalCenter: parent.verticalCenter
             color: "#999"
         }

         Label{
             anchors.verticalCenter: parent.verticalCenter
             text: "out:"
             font.pixelSize: 12
             color: "#999"
         }

         ComboBox{
             id: booksID
             height: 20
             width: 50
             model: books
             anchors.verticalCenter: parent.verticalCenter
         }
     }
}

如您所见,我正在将名称添加到Label (id: nameID),并且希望将图书提供给ComboBoxE 231(E 132id:booksID<代码>E 233),其中具有E 134模型E 235,如果我将图书键设置为E 136ListElementE 237我可以如何喂养所有值?

在QML中,ListModelListElement文档没有提到获取所有密钥的值,对吗?它只支持基于索引号的get(int index)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-18 05:35:01

你做错了。数组成员必须是ListElement

代码语言:javascript
运行
复制
ListModel {
    id: mod
    ListElement {
        name: "ali"
        dic: [ ListElement{text:"asad-o-llah"; code: 14}, ListElement{text:"aboo torab"; code: 72}, ListElement{text:"amir al-momenin"; code: 110}]
    }
}

ListView {
    model: mod
    anchors.fill: parent
    delegate: Component {
        Rectangle {
            width: parent.width; height: 50
            Row {
                Text {
                    text: name
                }
                ComboBox {
                    width: 100; height: 30
                    model: dic        //<-- set dic as model for combo box
                    textRole: "text"  //<-- important!
                    onCurrentIndexChanged: {
                        console.log("current code is "+model.get(currentIndex).code);   //<-- get code value
                    }
                }
            }
        }
    }
}
Component.onCompleted: {
    var v = mod.get(0).dic.get(0).value;    //<-- sample usage
    console.log(v);
}
票数 8
EN

Stack Overflow用户

发布于 2019-01-31 14:36:22

作为使用ListModel和ListElement的替代方法,您还可以查看QSyncable JsonListModel QML类型。(这是一个开源组件,您可以在GitHub:https://github.com/benlau/qsyncable上找到它)

JsonListModel是一种专门的ListModel类型,可以处理例如在QML中创建或从REST服务中获取的JSON数组。它会自动将JSON同步到QML ListModel,因此使用起来非常方便:

代码语言:javascript
运行
复制
ListView {
        id: listView
        anchors.fill: parent

        // property for json data, used as source for JsonListModel
        property var jsonData: []

        // use JsonListModel as model
        model: JsonListModel {
          source: listView.jsonData
          keyField: "id"
        }

        // delegate
        delegate: DelegateItem { /* ... */ }
}

您还可以在这里找到一个全面的指南:JsonListModel指南

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

https://stackoverflow.com/questions/45156895

复制
相关文章

相似问题

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