2014-09-22 32 views
6

ListView tablom var. Bu tablonun öğelerini, öğe türüne göre gizlemek/göstermek için bazı filtre düğmeleri eklemek istiyorum. En kolay yol, öğe temsilcisinin görünür özelliğini belirler. Ancak, gizli öğeler hala listView.contentHeight veya listView.visibleArea.heightRatio'da sayılır. Sonuç olarak, bu değerler kaydırma yaparken kaydırma çubuğunun yüksekliğini ve konumunu etkiler, değişmez, genişler, sırayla atlar.QML ListView filtre öğeleri

Listedeki diğer bir konu Listede, eğer bir öğe seçiliyse, indeksini bilmenin bir yolu yoktur, örneğin tablodaki ikinci sırada olduğu gibi görünüyor, ancak aslında dizininin daha yüksek olması nedeniyle görünmez öğeler. Görünmez öğeler sayılmazsa iyi olur.

Lütfen bu sorunun nasıl çözüleceğine yardımcı olun. Hepinize teşekkür ederim.

ListView{ 
    id: listView 
    delegate: itemdelegate 
} 

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

cevap

2

Öğeleri görüntüleme modelinize dinamik olarak ekleyin, örn.

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

Yardımlarınız için teşekkürler. Bu çözüme daha önce başlamıştım ancak performans bilgisi, liste görünümü modelini (ve böylece tablo öğelerini) temizlemek ve doldurmak için daha fazla zaman harcayarak, GUI'nin dondurulmasını sağlar. Bir performans testi denedim ve bahsettiğim yol önemli ölçüde daha kısa sürdü. – Maluvel

1

verileri farz Başvurunuzun C++ taraftan geliyor, bunu yapmanın doğru yolu modeline QT'ın QSortFilterProxyModel kullanmaktır.

zaten bir kullanmıyorsanız, burada ListView filtreleme için VisualDataModel QML öğesini kullanmak anladım using C++ Models with QML Views

+0

Çalışabilir, ancak veriler QML'den geldiğinden teklifiniz o zaman geçerli değildir. Teşekkürler. – Maluvel

2

hakkında doc olduğunu ve çok güzel çalışıyor.

+1

Bunun herhangi bir örneği? –

+0

VisualDataModel örneğini arayabilirsiniz. Bu eski bir iş parçacığı ancak kodu bir örnekle güncellemeye çalışacağım. – Maluvel