2014-09-22 184 views
6

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

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

请帮助如何解决这个问题。谢谢你们。

ListView{ 
    id: listView 
    delegate: itemdelegate 
} 

Component{ 
    id: itemdelegate 
    Item{ 
    visible: model.type === filteredType ? true: false 
    } 
} 

回答

2

将项目动态追加到显示模型f.e.

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

感谢您的帮助。 我早些时候使用过这个解决方案,但性能方面,您的方式需要更多时间来清除和填充列表视图模型(以及表项),从而导致GUI冻结。我已经尝试过一次性能测试,我提到的方法花费了大量的时间。 – Maluvel 2014-09-23 18:58:54

2

的文档我想通了使用VisualDataModel QML项目的ListView控件过滤和它的作品非常好。

+1

这个的任何例子? – 2016-10-31 18:11:44

+0

您可以搜索VisualDataModel示例。这是一个旧的线程,但我会尝试在某些时候更新带有示例的代码。 – Maluvel 2016-11-26 09:55:26