In Gtk, wie kann ich ein ListStor für die Zeile eines bestimmten Wert enthält?
-
19-09-2019 - |
Frage
Ich habe eine ListStore
eine Liste von Tag
s Modellierung. Diese Liste kann von der ListStore
ändern auseinander. Was ich möchte, ist zu tun, um das TagRemoved
Ereignis in meiner TagList
Klasse zu hören, und die Tag
vom ListStore
entfernen, wenn das Ereignis ausgelöst wird. Allerdings kann ich nicht einen Weg zu finden, scheinen eine ListStore
für die Zeile, die einen bestimmten Tag
zu suchen, damit ich sie entfernen können.
Gibt es eine Möglichkeit, dies zu tun?
Lösung
Ein GtkListStore
implementiert die GtkTreeModel
-Schnittstelle, die den Baum-Traversal-Operationen enthält, die Sie wollen. Soweit ich weiß, gibt es keine Bequemlichkeit API eine Liste / Baumspeicher für die Suche, so dass Sie Ihre eigene Rolle haben werden.
Da Sie einfach eine GtkListStore
iterieren, können Sie alle die API mit Kind / Eltern Beziehungen zu tun ignorieren und einfach verwenden gtk_tree_model_iter_first()
und gtk_tree_model_iter_next()
die Liste zu durchqueren.
Alternativ, wenn Sie bereits den Index des entfernten Tages im Laden kennen (zB von Ihrem TagRemoved
Ereignisse), können Sie das in eine GtkTreePath
drehen und verwenden gtk_tree_model_get_iter()
die Zeile in Frage, ohne eine Suche direkt abgerufen werden.
Andere Tipps
GtkListStore wird intern als Liste verknüpft so Sie sollten selbst das Modell scannen.