2014-09-22 188 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