В Gtk, как мне выполнить поиск в ListStore строки, содержащей определенное значение?
-
19-09-2019 - |
Вопрос
У меня есть ListStore
моделирование списка Tag
s.Этот список может меняться в зависимости от ListStore
.Что я хотел бы сделать, так это послушать TagRemoved
событие в моем TagList
класс, и удалите Tag
из ListStore
когда событие срабатывает.Однако, похоже, я не могу найти способ выполнить поиск в ListStore
для строки, содержащей заданный Tag
, чтобы я мог удалить его.
Есть ли какой-нибудь способ сделать это?
Решение
A GtkListStore
реализует GtkTreeModel
интерфейс, который содержит нужные вам операции обхода дерева.Насколько я знаю, не существует удобного API для поиска по списку / древовидному хранилищу, поэтому вам придется использовать свой собственный.
Поскольку вы просто перебираете GtkListStore
, вы можете игнорировать все API, имеющие дело с дочерними / родительскими отношениями, и просто использовать gtk_tree_model_iter_first()
и gtk_tree_model_iter_next()
чтобы просмотреть список.
В качестве альтернативы, если вы уже знаете индекс удаленного тега в магазине (например, из вашего TagRemoved
событие), вы можете превратить это в GtkTreePath
и использовать gtk_tree_model_get_iter()
чтобы получить соответствующую строку напрямую, без поиска.
Другие советы
GtkListStore внутренне реализован как связанный список поэтому вы должны отсканировать модель самостоятельно.