QML ListView过滤项目
我有一个ListView表。我想添加一些过滤器按钮来根据项目类型隐藏/显示此表的项目。最简单的方法是设置物品代理的可见属性。但是,隐藏的项目仍然计入listView.contentHeight或listView.visibleArea.heightRatio。因此,这些值在滚动时会发生变化,并影响滚动条的高度和位置,它会折叠,展开,不按顺序跳转。QML ListView过滤项目
其他问题是,在listView中,如果选中某个项目,则无法知道其索引,例如它看起来像在表格中的第二位,但实际上它的索引由于看不见的物品。如果无形物品根本不计算在内,这可能会很好。
请帮助如何解决这个问题。谢谢你们。
ListView{
id: listView
delegate: itemdelegate
}
Component{
id: itemdelegate
Item{
visible: model.type === filteredType ? true: false
}
}
将项目动态追加到显示模型f.e.
filterButton.onClicked:{
for(var i = 0; i < myListModel.count;i++)
{
if(myListModel.get(i).desiredProperty == "desiredValue")
myDisplayModel.append("prop1":"val1");
}
}
假设数据来自应用程序的C++的一面,这样做的正确方法是在模型中使用Qt的QSortFilterProxyModel。
如果您尚未使用,这里是约using C++ Models with QML Views
它可能有效,但由于数据来自QML,因此您的提议不适用。谢谢。 – Maluvel 2016-02-24 12:04:16
的文档我想通了使用VisualDataModel QML项目的ListView控件过滤和它的作品非常好。
这个的任何例子? – 2016-10-31 18:11:44
您可以搜索VisualDataModel示例。这是一个旧的线程,但我会尝试在某些时候更新带有示例的代码。 – Maluvel 2016-11-26 09:55:26
感谢您的帮助。 我早些时候使用过这个解决方案,但性能方面,您的方式需要更多时间来清除和填充列表视图模型(以及表项),从而导致GUI冻结。我已经尝试过一次性能测试,我提到的方法花费了大量的时间。 – Maluvel 2014-09-23 18:58:54