QML ListView过滤器项

Mal*_*vel 7 listview filter qml

我有一个ListView表.我想添加一些过滤器按钮来根据项目类型隐藏/显示该表的项目.最简单的方法是设置项委托的可见属性.但是,隐藏的项目仍计入listView.contentHeight或listView.visibleArea.heightRatio.因此,这些值在滚动时会发生变化,并影响滚动条的高度和位置,它会折叠,展开,跳转无序.

其他问题是在listView中,如果选择了一个项目,则无法知道其索引,例如它看起来像是在表中的第二位,但实际上由于不可见的项目,它的索引更高.如果根本不计算隐形物品,那可能会很好.

请帮忙解决这个问题.谢谢你们.

ListView{
  id: listView
  delegate: itemdelegate
}

Component{
  id: itemdelegate
  Item{
    visible: model.type === filteredType ? true: false
  }
}
Run Code Online (Sandbox Code Playgroud)

Nad*_*ian 3

将项目动态附加到您的显示模型,例如

filterButton.onClicked:{
    for(var i = 0; i < myListModel.count;i++)
    {
        if(myListModel.get(i).desiredProperty == "desiredValue")
            myDisplayModel.append("prop1":"val1");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢您的帮助。我之前有这个解决方案,但在性能方面,您的方式需要更多时间来清除和填充列表视图模型(以及表项),从而导致 GUI 冻结。我尝试过性能测试,我提到的方法花费的时间明显更短。 (4认同)