在listView QML中将嵌套JSON用作section.property
我正在创建一个在listView QML中将嵌套JSON用作section.property,json,qt,qml,qt5,felgo,Json,Qt,Qml,Qt5,Felgo,我正在创建一个listView,其中我的委托及其信息来自JSON-我的问题是我试图从JSON中的嵌套区域设置节.property。嵌套数据将是动态的,因此我需要以适合每个应用程序用户的方式工作 我正在使用的文档是: & 我的JSON的一个例子是 [{ "firstname":"Edward", "subGroup":"Reception", "admin":1, "roles": {"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
listView
,其中我的委托及其信息来自JSON-我的问题是我试图从JSON中的嵌套区域设置节.property
。嵌套数据将是动态的,因此我需要以适合每个应用程序用户的方式工作
我正在使用的文档是:
&
我的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个部分。
助理、接待、造型师、技术人员
我的问题是:
我想使用角色
作为我的列表视图{section.property}
,用户的可见性取决于他们在该角色中的布尔值-从上面的示例可以看出;
爱德华将在接待处和造型师中都可见,而克莱尔将在助理和造型师中都可见
如何将嵌套的JSON定义为列表中的节属性
----更新---
通过在mySortFilterProxyModel{}
中添加额外的proxyRole
,如下所示:
proxyRoles: ExpressionRole {
name: "role"
expression: JSON.stringify(model.roles)
}
并将我的节。属性:
更改为“角色”,我可以为那些角色匹配的人创建节,更接近,但仍然不符合预期(请参见所附的屏幕截图)
我还进一步尝试了在数据中循环,包括:
expression: {
for(var x in model.roles){
if(model.roles[x] === 1){
x
}
}
}
然后返回最终索引(如上所述),或者再次返回,将项推送到一个新数组,但结果仍然返回所有项
列表视图
创建从模型数据派生的每个代理,这意味着代理无法被有效复制,这正是我试图根据用户角色中的布尔值所做的
我纠正了这一点,在创建数组时,在其角色中具有多个布尔值的任何用户都会为每个角色获得一个额外的数组对象,并将我的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
创建从模型数据派生的每个代理,这意味着代理不能被有效地复制,这正是我试图根据用户角色中的布尔值所做的
我纠正了这一点,在创建数组时,在其角色中具有多个布尔值的任何用户都会为每个角色获得一个额外的数组对象,并将我的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
}
}]
请出示你的密码。到目前为止,你成功做到了什么,你失败了什么。预期的行为是什么?你看到了什么。现在它看起来像是“为我做”任务。嗨@folibis我已经用一个最小的JsonListModel进行了更新,为了清晰起见,我正在使用它!这是一个通常设置
section.property:“…”
通常很好,但是如果它是嵌套数据的根,我的节就不会显示任何内容!您好@folibis如果这有助于提供更多关于我试图实现的目标的见解,我将进一步扩展我的问题!谢谢,请展示你的代码。到目前为止,你成功做到了什么,你失败了什么。预期的行为是什么?你看到了什么。现在它看起来像是“为我做”任务。嗨@folibis我已经用一个最小的JsonListModel进行了更新,为了清晰起见,我正在使用它!这是一个通常设置section.property:“…”
通常很好,但是如果它是嵌套数据的根,我的节就不会显示任何内容!您好@folibis如果这有助于提供更多关于我试图实现的目标的见解,我将进一步扩展我的问题!谢谢