📄 gtktreemodel.html
字号:
>gint</a> column, <ahref="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue">GValue</a> *value);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-next">gtk_tree_model_iter_next</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-children">gtk_tree_model_iter_children</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *parent);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-has-child">gtk_tree_model_iter_has_child</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-n-children">gtk_tree_model_iter_n_children</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-nth-child">gtk_tree_model_iter_nth_child</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *parent, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> n);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> <a class="link" href="GtkTreeModel.html#gtk-tree-model-iter-parent">gtk_tree_model_iter_parent</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *child);<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar">gchar</a>* <a class="link" href="GtkTreeModel.html#gtk-tree-model-get-string-from-iter">gtk_tree_model_get_string_from_iter</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-ref-node">gtk_tree_model_ref_node</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-unref-node">gtk_tree_model_unref_node</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-get">gtk_tree_model_get</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, ...);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-get-valist">gtk_tree_model_get_valist</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, va_list var_args);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-foreach">gtk_tree_model_foreach</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *model, <a class="link" href="GtkTreeModel.html#GtkTreeModelForeachFunc">GtkTreeModelForeachFunc</a> func, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer">gpointer</a> user_data);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-row-changed">gtk_tree_model_row_changed</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreePath">GtkTreePath</a> *path, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-row-inserted">gtk_tree_model_row_inserted</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreePath">GtkTreePath</a> *path, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-row-has-child-toggled">gtk_tree_model_row_has_child_toggled</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreePath">GtkTreePath</a> *path, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-row-deleted">gtk_tree_model_row_deleted</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreePath">GtkTreePath</a> *path);void <a class="link" href="GtkTreeModel.html#gtk-tree-model-rows-reordered">gtk_tree_model_rows_reordered</a> (<a class="link" href="GtkTreeModel.html" title="GtkTreeModel">GtkTreeModel</a> *tree_model, <a class="link" href="GtkTreeModel.html#GtkTreePath">GtkTreePath</a> *path, <a class="link" href="GtkTreeModel.html#GtkTreeIter">GtkTreeIter</a> *iter, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> *new_order);</pre></div><div class="refsect1" lang="en"><a name="id3673685"></a><h2>Object Hierarchy</h2><pre class="synopsis"> GInterface +----GtkTreeModel</pre></div><div class="refsect1" lang="en"><a name="id3673710"></a><h2>Prerequisites</h2><p>GtkTreeModel requires <ahref="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>.</p></div><div class="refsect1" lang="en"><a name="id3673732"></a><h2>Known Derived Interfaces</h2><p>GtkTreeModel is required by <a class="link" href="GtkTreeSortable.html" title="GtkTreeSortable">GtkTreeSortable</a>.</p></div><div class="refsect1" lang="en"><a name="id3673755"></a><h2>Known Implementations</h2><p>GtkTreeModel is implemented by <a class="link" href="GtkTreeModelFilter.html" title="GtkTreeModelFilter">GtkTreeModelFilter</a>, <a class="link" href="GtkTreeModelSort.html" title="GtkTreeModelSort">GtkTreeModelSort</a>, <a class="link" href="GtkTreeStore.html" title="GtkTreeStore">GtkTreeStore</a> and <a class="link" href="GtkListStore.html" title="GtkListStore">GtkListStore</a>.</p></div><div class="refsect1" lang="en"><a name="id3673799"></a><h2>Signals</h2><pre class="synopsis"> "<a class="link" href="GtkTreeModel.html#GtkTreeModel-row-changed">row-changed</a>" : Run Last "<a class="link" href="GtkTreeModel.html#GtkTreeModel-row-deleted">row-deleted</a>" : Run First "<a class="link" href="GtkTreeModel.html#GtkTreeModel-row-has-child-toggled">row-has-child-toggled</a>" : Run Last "<a class="link" href="GtkTreeModel.html#GtkTreeModel-row-inserted">row-inserted</a>" : Run First "<a class="link" href="GtkTreeModel.html#GtkTreeModel-rows-reordered">rows-reordered</a>" : Run First</pre></div><div class="refsect1" lang="en"><a name="id3673870"></a><h2>Description</h2><p>The <a class="link" href="GtkTreeModel.html" title="GtkTreeModel"><span class="type">GtkTreeModel</span></a> interface defines a generic tree interface for use bythe <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a> widget. It is an abstract interface, and is designedto be usable with any appropriate data structure. The programmer justhas to implement this interface on their own data type for it to beviewable by a <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a> widget.</p><p>The model is represented as a hierarchical tree of strongly-typed,columned data. In other words, the model can be seen as a tree whereevery node has different values depending on which column is beingqueried. The type of data found in a column is determined by using theGType system (ie. <ahref="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-TYPE-INT:CAPS"><span class="type">G_TYPE_INT</span></a>, <span class="type">GTK_TYPE_BUTTON</span>, <ahref="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-TYPE-POINTER:CAPS"><span class="type">G_TYPE_POINTER</span></a>, etc.).The types are homogeneous per column across all nodes. It is importantto note that this interface only provides a way of examining a model andobserving changes. The implementation of each individual model decideshow and if changes are made.</p><p>In order to make life simpler for programmers who do not need to writetheir own specialized model, two generic models are provided — the<a class="link" href="GtkTreeStore.html" title="GtkTreeStore"><span class="type">GtkTreeStore</span></a> and the <a class="link" href="GtkListStore.html" title="GtkListStore"><span class="type">GtkListStore</span></a>. To use these, the developer simplypushes data into these models as necessary. These models provide thedata structure as well as all appropriate tree interfaces. As a result,implementing drag and drop, sorting, and storing data is trivial. Forthe vast majority of trees and lists, these two models are sufficient.</p><p>Models are accessed on a node/column level of granularity. One canquery for the value of a model at a certain node and a certain columnon that node. There are two structures used to reference a particularnode in a model. They are the <a class="link" href="GtkTreeModel.html#GtkTreePath"><span class="type">GtkTreePath</span></a> and the <a class="link" href="GtkTreeModel.html#GtkTreeIter"><span class="type">GtkTreeIter</span></a><sup>[<a name="id3674002" href="#ftn.id3674002" class="footnote">4</a>]</sup>Most of the interface consists of operations on a <a class="link" href="GtkTreeModel.html#GtkTreeIter"><span class="type">GtkTreeIter</span></a>.</p><p>A path is essentially a potential node. It is a location on a modelthat may or may not actually correspond to a node on a specific model.The <a class="link" href="GtkTreeModel.html#GtkTreePath"><span class="type">GtkTreePath</span></a> struct can be converted into either an array ofunsigned integers or a string. The string form is a list of numbersseparated by a colon. Each number refers to the offset at that level.Thus, the path “<span class="quote">0</span>” refers to the root node and the path“<span class="quote">2:4</span>” refers to the fifth child of the third node.</p><p>By contrast, a <a class="link" href="GtkTreeModel.html#GtkTreeIter"><span class="type">GtkTreeIter</span></a> is a reference to a specific node on aspecific model. It is a generic struct with an integer and threegeneric pointers. These are filled in by the model in a model-specificway. One can convert a path to an iterator by calling<a class="link" href="GtkTreeModel.html#gtk-tree-model-get-iter"><code class="function">gtk_tree_model_get_iter()</code></a>. These iterators are the primary way ofaccessing a model and are similar to the iterators used by<a class="link" href="GtkTextBuffer.html" title="GtkTextBuffer"><span class="type">GtkTextBuffer</span></a>. They are generally statically allocated on the stack andonly used for a short time. The model interface defines a set ofoperations using them for navigating the model.</p><p>It is expected that models fill in the iterator with private data. Forexample, the <a class="link" href="GtkListStore.html" title="GtkListStore"><span class="type">GtkListStore</span></a> model, which is internally a simple linkedlist, stores a list node in one of the pointers. The <a class="link" href="GtkTreeModelSort.html" title="GtkTreeModelSort"><span class="type">GtkTreeModelSort</span></a>stores an array and an offset in two of the pointers. Additionally,there is an integer field. This field is generally filled with a uniquestamp per model. This stamp is for catching errors resulting from usinginvalid iterators with a model.</p><p>The lifecycle of an iterator can be a little confusing at first.Iterators are expected to always be valid for as long as the model isunchanged (and doesn't emit a signal). The model is considered to ownall outstanding iterators and nothing needs to be done to free them fromthe user's point of view. Additionally, some models guarantee that aniterator is valid for as long as the node it refers to is valid (mostnotably the <a class="link" href="GtkTreeStore.html" title="GtkTreeStore"><span class="type">GtkTreeStore</span></a> and <a class="link" href="GtkListStore.html" title="GtkListStore"><span class="type">GtkListStore</span></a>). Although generallyuninteresting, as one always has to allow for the case where iteratorsdo not persist beyond a signal, some very important performanceenhancements were made in the sort model. As a result, the<a class="link" href="GtkTreeModel.html#GTK-TREE-MODEL-ITERS-PERSIST:CAPS"><span class="type">GTK_TREE_MODEL_ITERS_PERSIST</span></a> flag was added to indicate this behavior.</p><p>To help show some common operation of a model, some examples areprovided. The first example shows three ways of getting the iter at thelocation “<span class="quote">3:2:5</span>”. While the first method shown is easier,the second is much more common, as you often get paths from callbacks.</p><p></p><div class="example"><a name="id3674172"></a><p class="title"><b>Example 15. Acquiring a <span class="structname">GtkTreeIter</span></b></p><div class="example-contents"><pre class="programlisting">/* Three ways of getting the iter pointing to the location */{ GtkTreePath *path; GtkTreeIter iter; GtkTreeIter parent_iter; /* get the iterator from a string */ gtk_tree_model_get_iter_from_string (model, &iter, "3:2:5"); /* get the iterator from a path */ path = gtk_tree_path_new_from_string ("3:2:5"); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_path_free (path); /* walk the tree to find the iterator */ gtk_tree_model_iter_nth_child (model, &iter, NULL, 3); parent_iter = iter; gtk_tree_model_iter_nth_child (model, &iter, &parent_iter, 2); parent_iter = iter; gtk_tree_model_iter_nth_child (model, &iter, &parent_iter, 5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -