QML ListView过滤器项

时间:2014-09-22 16:08:11

标签: 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
  }
}

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

假设数据来自应用程序的C ++端,正确的方法是在模型上使用Qt的QSortFilterProxyModel

如果您还没有使用过,请参阅以下using C++ Models with QML Views

的文档

答案 2 :(得分:2)

我想出了使用VisualDataModel QML项进行ListView过滤,它非常好用。

答案 3 :(得分:0)

您可以根据过滤条件设置宽度/高度。 例如:

Rectangle {
    width: condition?100:0
    height: condition?100:0
}