在listView QML中使用嵌套JSON作为section.property。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在listView QML中使用嵌套JSON作为section.property。相关的知识,希望对你有一定的参考价值。
我正在创建一个 listView
我的代表和它的信息来自JSON--我的问题是,我正试图将我的代表的信息设置为 section.property
从JSON中的一个嵌套区域中获取数据。嵌套的数据将是动态的,所以我需要以一种适应每个应用程序用户的方式工作。
我正在使用的文档是。JsonListModel &.SortFilterProxyModel SortFilterProxyModel
我的JSON的例子是
[
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
,
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
]
我的工作是通过使用 JsonListModel
,QT Creator我的代码的最小部分如下。
import Felgo 3.0
import QtQuick 2.0
Page
id: editAdmins
property var newArr: dataModel.calendarUserItems.users
property var userRoles: ()
property var l
JsonListModel // list model for json data
id: jsonModel
source: dataModel.jsonList // my full JSON
keyField: "firstname " + " surname"
fields: ["firstname", "surname", "subGroup", "admin", "email", "roles"]
SortFilterProxyModel // SortFilterProxyModel for sorting or filtering lists
id: sortedModel
// Note: when using JsonListModel, the sorters or filter might not be applied correctly when directly assigning sourceModel
// use the Component.onCompleted handler instead to initialize SortFilterProxyModel
Component.onCompleted: sourceModel = jsonModel
sorters: [
RoleSorter
id: groupSorter
roleName: "subGroup"
,
]
AppListView
id:view
model: sortedModel
anchors.fill: parent
section.property: "subGroup" //How I have used it previously before needing to set 'roles' as my property (which shows nothing)
section.delegate: SimpleSection
delegate: SimpleRow
id: container
text: model.firstname
detailText: model.surname
从上面的JSON,预期的结果将是,我的listView有4个Sections,从内部的 roles
巢。Assistant, Reception, Stylist, Technical
我的问题是。我想使用 roles
作为我 ListView section.property
而用户的可见性取决于他们在该角色中的布尔值--所以从上面的例子来看,Edward在接待和造型师中都是可见的,而Claire在助理和造型师中都是可见的。
我如何定义嵌套的JSON作为我的列表中的部分属性?
通过增加一个额外的 proxyRole
在我 SortFilterProxyModel
如图所示。
proxyRoles: ExpressionRole
name: "role"
expression: JSON.stringify(model.roles)
并改变我 section.property:
到 "角色",我能够为那些具有匹配角色的人创建部分,更接近,但仍然没有达到预期的目的(见附件截图)。
我进一步尝试了用许多不同的方法循环浏览数据。
expression:
for(var x in model.roles)
if(model.roles[x] === 1)
x
要么返回最后的索引(如上文所述),要么再次将项目推送到一个新的数组中,但结果仍然是全部返回。
ListViews
创建每个代表从他们的模型数据中派生出来,这意味着代表不能重复,因为实际上这就是我试图做的,取决于用户角色中的布尔运算。
我纠正了这一点,当数组被创建时,任何用户在其角色中具有多个布尔值,都会为每个角色获得一个额外的数组对象,并引导我的 section.property
到每个单独的角色名称。
从下面的代码中,Edward将创建2个数组对象,然后作为一个 "复制 "委托。
[
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
,
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
]
以上是关于在listView QML中使用嵌套JSON作为section.property。的主要内容,如果未能解决你的问题,请参考以下文章