2014-09-22 22 views
6

Ich habe eine ListView-Tabelle. Ich möchte einige Filterschaltflächen hinzufügen, um Elemente dieser Tabelle basierend auf dem Elementtyp auszublenden/anzuzeigen. Der einfachste Weg ist die Sichtbarkeit der Eigenschaft des Item-Delegaten. Versteckte Elemente werden jedoch immer noch in listView.contentHeight oder listView.AvideArea.heightRatio gezählt. Dadurch ändern sich diese Werte beim Scrollen und beeinflussen die Höhe und Position der Bildlaufleiste, sie kollabiert, expandiert, springt in keiner Reihenfolge.QML ListView Filterelemente

Andere Problem ist, dass in der ListView, wenn ein Element ausgewählt ist, gibt es keine Möglichkeit, seinen Index kennen, zum Beispiel sieht es aus wie es an zweiter Stelle in der Tabelle ist, aber tatsächlich ist sein Index höher wegen der unsichtbare Gegenstände. Es könnte schön sein, wenn die unsichtbaren Gegenstände überhaupt nicht gezählt werden.

Bitte helfen Sie, dieses Problem zu lösen. Danke euch allen.

ListView{ 
    id: listView 
    delegate: itemdelegate 
} 

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

Antwort

2

Elemente dynamisch an Ihr Anzeigemodell anhängen, z.

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

Danke für die Hilfe. Ich hatte diese Lösung früher, aber Ihre Leistung nimmt mehr Zeit in Anspruch, um das Listenansichtsmodell (und damit die Tabellenelemente) zu leeren und aufzufüllen, wodurch die GUI einfriert. Ich habe einen Leistungstest versucht und meine erwähnte Art nahm viel kürzere Zeit in Anspruch. – Maluvel

1

die Daten Nimmt man kommt aus der C++ Seite Ihrer Anwendung, der richtige Weg, dies zu tun, ist Qt QSortFilterProxyModel auf Ihrem Modell zu verwenden.

Wenn Sie nicht bereits ein verwenden, hier ist der doc über using C++ Models with QML Views

+0

Es könnte funktionieren, aber da die Daten von QML stammen, ist Ihr Vorschlag nicht anwendbar. Vielen Dank. – Maluvel

2

I VisualDataModel QML Artikel für Listview-Filterung und es funktioniert sehr schön verwenden heraus zu.

+1

Jedes Beispiel dafür? –

+0

können Sie nach VisualDataModel Beispiel suchen. Dies ist ein alter Thread, aber ich werde versuchen, den Code mit einem Sample zu aktualisieren. – Maluvel

Verwandte Themen