2014-09-22 30 views
6

Ho una tabella ListView. Voglio aggiungere alcuni pulsanti di filtro per nascondere/mostrare gli elementi di questa tabella in base al tipo di elemento. Il modo più semplice è impostare la proprietà visibile dell'oggetto delegato. Tuttavia, gli oggetti nascosti vengono comunque conteggiati in listView.contentHeight o listView.visibleArea.heightRatio. Di conseguenza, questi valori cambiano durante lo scorrimento e influenzano l'altezza e la posizione della barra di scorrimento, collassano, si espande, salta in nessun ordine.Elementi filtro QML ListView

Altro problema è che in ListView, se un elemento è selezionato, non c'è modo di conoscerne l'indice, ad esempio sembra che si trovi al secondo posto nella tabella ma in realtà il suo indice è più alto a causa del oggetti invisibili. Potrebbe essere bello se gli oggetti invisibili non vengono contati affatto.

Si prega di aiuto come risolvere questo problema. Grazie a tutti.

ListView{ 
    id: listView 
    delegate: itemdelegate 
} 

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

risposta

2

Aggiungi elementi al modello di display in modo dinamico, ad es.

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

Grazie per l'aiuto. Ho avuto questa soluzione in precedenza, ma le prestazioni a vostro modo richiedono più tempo per cancellare e popolare il modello di visualizzazione elenco (e quindi gli elementi della tabella), risultante congelamento della GUI. Ho provato un test delle prestazioni e il mio modo menzionato ha richiesto molto meno tempo. – Maluvel

1

Supponendo i dati provengono dal lato C++ della vostra applicazione, il modo corretto di fare questo è quello di utilizzare Qt QSortFilterProxyModel del modello.

Se non si utilizza già uno, qui è il doc su using C++ Models with QML Views

+0

Potrebbe funzionare ma poiché i dati provengono da QML, la proposta non è applicabile. Grazie. – Maluvel

2

ho capito di usare voce VisualDataModel QML per il filtraggio ListView e funziona molto bello.

+1

Qualche esempio di questo? –

+0

è possibile cercare l'esempio VisualDataModel. Questa è una vecchia discussione ma cercherò di aggiornare il codice con il campione ad un certo punto. – Maluvel

Problemi correlati