No GTK, como procuro uma liststore pela linha que contém um valor específico?
-
19-09-2019 - |
Pergunta
eu tenho um ListStore
Modelando uma lista de Tag
s. Esta lista pode mudar além do ListStore
. O que eu gostaria de fazer é ouvir o TagRemoved
evento no meu TagList
classe e remova o Tag
de ListStore
Quando o evento é acionado. No entanto, não consigo encontrar uma maneira de pesquisar um ListStore
para a linha que contém um dado Tag
, para que eu possa removê -lo.
Há alguma maneira de fazer isso?
Solução
UMA GtkListStore
implementa o GtkTreeModel
interface, que contém as operações de travessia de árvores que você deseja. Até onde eu sei, não há API de conveniência para pesquisar em uma lista/loja de árvores, então você terá que rolar o seu próprio.
Já que você está simplesmente iterando sobre um GtkListStore
, você pode ignorar toda a API que lida com as relações com filhos/pais e simplesmente usar gtk_tree_model_iter_first()
e gtk_tree_model_iter_next()
Para atravessar a lista.
Como alternativa, se você já conhece o índice da tag removida na loja (por exemplo, do seu TagRemoved
evento), você pode transformar isso em um GtkTreePath
E use gtk_tree_model_get_iter()
Para recuperar a linha em questão diretamente sem pesquisar.
Outras dicas
GTKListStore é implementado internamente como um Lista vinculada Então você deve escanear o modelo sozinho.