Qt 如果没有可用的modelData,是否可以用Image替换SimpleRow

Qt 如果没有可用的modelData,是否可以用Image替换SimpleRow,qt,listview,model,qml,v-play,Qt,Listview,Model,Qml,V Play,我有一个列表视图,其中当前显示的modelData随着按钮在多个部门选项之间循环而变化。如果其中一个部门没有数据,我的代表将继续显示以前的列表数据,直到它到达带有数据的modelData的新部分 我想做的是,当模型为“空”(未定义,这可能发生在它要查找的密钥尚未在我的Firebase数据库中创建,或者当前没有可见项时),显示文本/图像;i、 “现在就走,这里没什么可看的” 我的模型来自JSON,下面是一个示例。mycalendarUserItems是我的Firebase数据库中多个子节点的根节点

我有一个
列表视图
,其中当前显示的
modelData
随着按钮在多个部门选项之间循环而变化。如果其中一个部门没有数据,我的
代表
将继续显示以前的列表数据,直到它到达带有数据的
modelData
的新部分

我想做的是,当模型为“空”(未定义,这可能发生在它要查找的密钥尚未在我的Firebase数据库中创建,或者当前没有可见项时),显示文本/图像;i、 “现在就走,这里没什么可看的”

我的模型来自JSON,下面是一个示例。my
calendarUserItems
是我的Firebase数据库中多个子节点的根节点,my
AppButton的目标。groupCycle
也为每个子节点添加了进一步的方向,以此过滤数据,以便在页面内查看和编辑

我的代码示例如下:

Page {
id: adminPage

property var departments: [1,2,3,4]
property int currGroupIndex: 0

    AppButton {
        id: groupCycle   
        text: "Viewing: " + departments[currGroupIndex]
        onClicked: {
            if (currGroupIndex == departments.length - 1)
                currGroupIndex = 0;
            else
                currGroupIndex++;
        }
    }

    ListView {

        model: Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]])

        delegate: modelData.visible ? currentGroupList : emptyHol

        Component {
            id: emptyHol
            AppText {
                text: "nothing to see here move along now!"
            }
        }
        Component {
            id: currentGroupList
            SimpleRow {
                id: container                

                readonly property var calendarUserItem: dataModel.calendarUserItems[departments[currGroupIndex]][modelData] || {}

                visible: container.calendarUserItem.status === "pending" ? true : false
                 // only pending items visible
                 // remaining code for simple row
            }
        }
    }
}
my
dataModel.calendarUserItems
中的JSON示例如下:

"groupName": [
    { "department1": 
        { "1555111624727" : {
              "creationDate" : 1555111624727,
              "date" : "2019-03-15T12:00:00.000",
              "name" : "Edward Lawrence",
              "status": "pending"
             },
//several of these entries within department1
        },
    },
    { "department2":
        { "1555111624727" : {
              "creationDate" : 1555111624456,
              "date" : "2019-05-1T12:00:00.000",
              "name" : "Katie P",
              "status": 1
             },
//several of these entries within department2
        },
    }
//departments 3 & 4 as the same
]
如果部门2和部门3有
modelData
,而部门1和部门4没有,我希望显示文本,并清空
列表视图,而不是显示以前的
modelData

我尝试过使用图像/文本可见性,但问题更多在于清除
modelData
,我不确定从哪里开始


非常感谢您的帮助

我通过使用以下人员作为我的代表实现了显示:

delegate: {
  if (!(departments[currGroupIndex] in dataModel.calendarUserItems) ) {
    return emptyHol;
  }
  var subgroups = Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]]);
  for (var i in subgroups) {
    var subgroup = dataModel.calendarUserItems[departments[currGroupIndex]][subgroups[i]];
    modelArr.push(subgroup);
  }
  var modelObect = modelArr.find( function(obj) { return obj.status === "pending"; } );
  
  if (modelObect === undefined) {
    return emptyHol;
  }            
  return currentGroupList;
}
然后,当按下my
AppButton.groupCycle
时,我添加了
modelArr=[]
以清除每次按下时的数组,这将按预期工作


谢谢

委托:某些条件怎么样?Component1:Component2
?您好@folibis谢谢您的指导,我已经尝试了
委托:if(Object.keys(dataModel.calendarUserItems[departments[currGroupIndex]])。length>0
!={}
但我只收到bool
意外标记“?”上的错误,以检查模型数据是否为空,或者是否在使用长度内有对象?@folibis自从我上次发表评论以来,我一直在玩弄你的建议,但仍然无法取得任何进展-其中我的
模型数据来自数组,并且有些项目不可见,我无法执行诸如
model.count>0?Component1:Component2
,我可以选择哪些选项来检查
modelData
是否根本不存在,或者
SimpleRow
委托中是否没有可见的
项目?
modelData
不能为空,因为引擎将模型作为一个数组,并将对每个项的引用作为
modelData
应用于代理项。至于
visible
属性,您能否使用
delegate:modelData.visible?Component1:Component2
?Hi@folibis我认为当前的主要问题是我的
只读属性var calendarUserItem:dataModel.calendarUserItems[departments[currGroupIndex][modelData]| |{}
currGroupIndex
没有可见或数据库中的数据时,它会出错,并且不会删除以前的
currGroupIndex
视图?我不完全确定您的最后一段……数据库是什么?它是
dataModel.calendarUserItems
?是否有特定的错误消息?Hi@TrebledJ抱歉,我有e编辑了问题和答案!希望这对您现在更清楚!谢谢!