In Gtk, come faccio a cercare un ListStore per la riga contenente un valore particolare?
-
19-09-2019 - |
Domanda
Ho un ListStore
modellare un elenco di Tag
s. Questo elenco può cambiare a parte il ListStore
. Quello che mi piacerebbe fare è ascoltare l'evento TagRemoved
nella mia classe TagList
, e rimuovere il Tag
dalla ListStore
quando viene attivato l'evento. Tuttavia, non riesco a trovare un modo per cercare un ListStore
per la riga contenente un dato Tag
, in modo che possa rimuoverlo.
Esiste un modo per fare questo?
Soluzione
A GtkListStore
implementa l'interfaccia GtkTreeModel
, che contiene le operazioni di attraversamento degli alberi che si desidera. Per quanto ne so, non v'è alcuna API convenienza per la ricerca di un negozio di lista / albero, quindi dovrete rotolare il proprio.
Dal momento che si sta semplicemente l'iterazione di un GtkListStore
, è possibile ignorare tutte le API che fare con le relazioni figlio / genitore, e semplicemente utilizzare gtk_tree_model_iter_first()
e gtk_tree_model_iter_next()
per attraversare la lista.
In alternativa, se si conosce già l'indice del tag rimosso in negozio (ad esempio, dal vostro TagRemoved
evento), è possibile trasformarla in un GtkTreePath
e utilizzare gtk_tree_model_get_iter()
per recuperare la riga in questione direttamente senza la ricerca.