⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkliststore.sgml

📁 This GTK+ version 2.12.3. GTK+ is a multi-platform toolkit for creating graphical user interfaces.
💻 SGML
字号:
<!-- ##### SECTION Title ##### -->GtkListStore<!-- ##### SECTION Short_Description ##### -->A list-like data structure that can be used with the GtkTreeView<!-- ##### SECTION Long_Description ##### --><para>The #GtkListStore object is a list model for use with a #GtkTreeViewwidget.  It implements the #GtkTreeModel interface, and consequentialy,can use all of the methods available there.  It also implements the#GtkTreeSortable interface so it can be sorted by the view.Finally, it also implements the tree <link linkend="gtktreednd">drag anddrop</link> interfaces.</para><para>The #GtkListStore can accept most GObject types as a column type, thoughit can't accept all custom types.  Internally, it will keep a copy ofdata passed in (such as a string or a boxed pointer).  Columns thataccept #GObject<!-- -->s are handled a little differently.  The#GtkListStore will keep a reference to the object instead of copying thevalue.  As a result, if the object is modified, it is up to theapplication writer to call @gtk_tree_model_row_changed to emit the"row_changed" signal.  This most commonly affects lists with#GdkPixbuf<!-- -->s stored.</para><example><title>Creating a simple list store.</title><programlisting>enum {  COLUMN_STRING,  COLUMN_INT,  COLUMN_BOOLEAN,  N_COLUMNS};{  GtkListStore *list_store;  GtkTreePath *path;  GtkTreeIter iter;  gint i;  list_store = gtk_list_store_new (N_COLUMNS,                                   G_TYPE_STRING,                                   G_TYPE_INT,                                   G_TYPE_BOOLEAN);  for (i = 0; i &lt; 10; i++)    {      gchar *some_data;      some_data = get_some_data (i);      /* Add a new row to the model */      gtk_list_store_append (list_store, &amp;iter);      gtk_list_store_set (list_store, &amp;iter,                          COLUMN_STRING, some_data,                          COLUMN_INT, i,                          COLUMN_BOOLEAN,  FALSE,                          -1);      /* As the store will keep a copy of the string internally, we       * free some_data.       */      g_free (some_data);    }  /* Modify a particular row */  path = gtk_tree_path_new_from_string ("4");  gtk_tree_model_get_iter (GTK_TREE_MODEL (list_store),                           &amp;iter,                           path);  gtk_tree_path_free (path);  gtk_list_store_set (list_store, &amp;iter,                      COLUMN_BOOLEAN, TRUE,                      -1);}</programlisting></example><refsect2><title>Performance Considerations</title><para>Internally, the #GtkListStore was implemented with a linked list with atail pointer prior to GTK+ 2.6.  As a result, it was fast at datainsertion and deletion, and not fast at random data access.  The#GtkListStore sets the #GTK_TREE_MODEL_ITERS_PERSIST flag, which meansthat #GtkTreeIter<!-- -->s can be cached while the row exists.  Thus, ifaccess to a particular row is needed often and your code is expected torun on older versions of GTK+, it is worth keeping the iter around.</para><title>Atomic Operations</title><para>It is important to note that only the methods gtk_list_store_insert_with_values() and gtk_list_store_insert_with_valuesv() are atomic, in the sense that the row is being appended to the store and the values filled in in a single operation with regard to #GtkTreeModel signaling.In contrast, using e.g. gtk_list_store_append() and then gtk_list_store_set() will first create a row, which triggers the #GtkTreeModel::row-inserted signal on #GtkListStore. The row, however, is still empty, and any signal handler connecting to "row-inserted" on this particular store should be preparedfor the situation that the row might be empty. This is especially important if you are wrapping the #GtkListStore inside a #GtkTreeModelFilter and areusing a #GtkTreeModelFilterVisibleFunc. Using any of the non-atomic operations to append rows to the #GtkListStore will cause the #GtkTreeModelFilterVisibleFunc to be visited with an empty row first; the function must be prepared for that.</para></refsect2><refsect2 id="GtkListStore-BUILDER-UI"><title>GtkListStore as GtkBuildable</title><para>The GtkListStore implementation of the GtkBuildable interface allowsto specify the model columns with a &lt;columns&gt; element that maycontain multiple &lt;column&gt; elements, each specifying one modelcolumn. The "type" attribute specifies the data type for the column.</para><para>Additionally, it is possible to specify content for the list storein the UI definition, with the &lt;data&gt; element. It can containmultiple &lt;row&gt; elements, each specifying to content for onerow of the list model. Inside a &lt;row&gt;, the &lt;col&gt; elementsspecify the content for individual cells.</para><para>Note that it is probably more common to define your models in the code, and one might consider it a layering violation to specify the content of a list store in a UI definition,<emphasis>data</emphasis>, not <emphasis>presentation</emphasis>, and common wisdom is to separate the two, as far as possible. <!-- FIXME a bit inconclusive --></para><example><title>A UI Definition fragment for a list store</title><programlisting><![CDATA[<object class="GtkListStore">  <columns>    <column type="gchararray"/>    <column type="gchararray"/>    <column type="gint"/>  </columns>  <data>    <row>      <col id="0">John</col>      <col id="1">Doe</col>      <col id="2">25</col>    </row>    <row>      <col id="0">Johan</col>      <col id="1">Dahlin</col>      <col id="2">50</col>    </row>  </data></object>]]></programlisting></example></refsect2><!-- ##### SECTION See_Also ##### --><para>#GtkTreeModel, #GtkTreeStore</para><!-- ##### SECTION Stability_Level ##### --><!-- ##### STRUCT GtkListStore ##### --><para></para><!-- ##### FUNCTION gtk_list_store_new ##### --><para></para>@n_columns: @Varargs: @Returns: <!-- ##### FUNCTION gtk_list_store_newv ##### --><para></para>@n_columns: @types: @Returns: <!-- ##### FUNCTION gtk_list_store_set_column_types ##### --><para></para>@list_store: @n_columns: @types: <!-- ##### FUNCTION gtk_list_store_set ##### --><para></para>@list_store: @iter: @Varargs: <!-- ##### FUNCTION gtk_list_store_set_valist ##### --><para></para>@list_store: @iter: @var_args: <!-- ##### FUNCTION gtk_list_store_set_value ##### --><para></para>@list_store: @iter: @column: @value: <!-- ##### FUNCTION gtk_list_store_set_valuesv ##### --><para></para>@list_store: @iter: @columns: @values: @n_values: <!-- ##### FUNCTION gtk_list_store_remove ##### --><para></para>@list_store: @iter: @Returns: <!-- ##### FUNCTION gtk_list_store_insert ##### --><para></para>@list_store: @iter: @position: <!-- ##### FUNCTION gtk_list_store_insert_before ##### --><para></para>@list_store: @iter: @sibling: <!-- ##### FUNCTION gtk_list_store_insert_after ##### --><para></para>@list_store: @iter: @sibling: <!-- ##### FUNCTION gtk_list_store_insert_with_values ##### --><para></para>@list_store: @iter: @position: @Varargs: <!-- ##### FUNCTION gtk_list_store_insert_with_valuesv ##### --><para></para>@list_store: @iter: @position: @columns: @values: @n_values: <!-- ##### FUNCTION gtk_list_store_prepend ##### --><para></para>@list_store: @iter: <!-- ##### FUNCTION gtk_list_store_append ##### --><para></para>@list_store: @iter: <!-- ##### FUNCTION gtk_list_store_clear ##### --><para></para>@list_store: <!-- ##### FUNCTION gtk_list_store_iter_is_valid ##### --><para></para>@list_store: @iter: @Returns: <!-- ##### FUNCTION gtk_list_store_reorder ##### --><para></para>@store: @new_order: <!-- ##### FUNCTION gtk_list_store_swap ##### --><para></para>@store: @a: @b: <!-- ##### FUNCTION gtk_list_store_move_before ##### --><para></para>@store: @iter: @position: <!-- ##### FUNCTION gtk_list_store_move_after ##### --><para></para>@store: @iter: @position: 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -