在ListView QML中隐藏项(委托)

时间:2018-02-01 14:28:37

标签: qt qml

有没有办法在ListView中的某个事件上隐藏特定项目?

到目前为止,我可以将visible设置为false并将height设置为委托的零。

但是如果我将listView中的间距设置为2,那么看起来这个解决方案已经破了。

enter image description here

2 个答案:

答案 0 :(得分:0)

解决这个问题的办法是将ListView的间距设置为0,并在委托本身中实现。像这样:

ListView{
   id: listView
   spacing: 0
   delegate: Item{
      id: itemDelegate
      width: parent.width; height: spacingRect.height + actualDelegate.height
      Item {id: actualDelegate;} // your actual delegate
      Rectangle{ id: spacingRect; height: 2; width: parent.width; color: "transparent"; anchors.top: actualDelegate.bottom}
   }
}

这样,当您隐藏委托时,间距也将被隐藏

答案 1 :(得分:0)

我认为正确的方法是使用代理模型来过滤掉不应显示的元素。 您可以使用QSortFilterProxyModel或实现自己的QAbstractProxyModel。 这样甚至可以为元素的删除和添加动画。

或者如果您不想接触C ++并且性能也不成问题,请使用SortFilterProxyModel