类
GtkListStore
已弃用:4.10
说明 [源代码]
class Gtk.ListStore : GObject.Object
implements Gtk.Buildable, Gtk.TreeDragDest, Gtk.TreeDragSource, Gtk.TreeModel, Gtk.TreeSortable {
/* No available fields */
}
可与 GtkTreeView 一同使用的类列表数据结构。
GtkListStore 是一个可与 GtkTreeView 组件一同使用的列表模型。它实现了 GtkTreeModel 接口,因此可以使用那里所有可用的方法。它还实现了 GtkTreeSortable 接口,因此可由视图进行排序。最后,它还实现了树 拖动 和 放置 接口。
GtkListStore 可接受大多数 GType 作为列类型,尽管它无法接受所有自定义类型。在内部,它将保留传入数据的副本(如字符串或装箱指针)。接受 GObject 的列处理方式略有不同。GtkListStore 将保留对对象的引用,而不是复制值。其结果是,如果修改了对象,应用程序编写者负责调用 gtk_tree_model_row_changed() 来发出 GtkTreeModel::row-changed 信号。这最常影响存储有 GdkTexture 的列表。
创建一个简单列表存储的示例
enum {
COLUMN_STRING,
COLUMN_INT,
COLUMN_BOOLEAN,
N_COLUMNS
};
{
GtkListStore *list_store;
GtkTreePath *path;
GtkTreeIter iter;
int i;
list_store = gtk_list_store_new (N_COLUMNS,
G_TYPE_STRING,
G_TYPE_INT,
G_TYPE_BOOLEAN);
for (i = 0; i < 10; i++)
{
char *some_data;
some_data = get_some_data (i);
// Add a new row to the model
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &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),
&iter,
path);
gtk_tree_path_free (path);
gtk_list_store_set (list_store, &iter,
COLUMN_BOOLEAN, TRUE,
-1);
}
从 GTK 4.10 开始,GtkListStore 已弃用,不应该在新建代码中使用。你需转而使用 GListStore 以及 GTK 提供的各种列表模型。
性能注意事项
在内部,最初实现 GtkListStore 时使用了一个带尾指针的链表。因此,它插入和删除数据很快,随机数据访问不快。GtkListStore 设置了 GTK_TREE_MODEL_ITERS_PERSIST 标志,这意味着当行存在时可缓存 GtkTreeIter。因此,如果经常需要访问特定行而你的代码预期在旧版本 GTK 上运行,值得保留迭代器。
原子操作
值得注意的是,只有 gtk_list_store_insert_with_values() 和 gtk_list_store_insert_with_valuesv() 方法是原子性的,这意味着就 GtkTreeModel 信号而言,该行正在追加到存储区且值已填充到单个操作中。相反,使用例如 gtk_list_store_append(),然后使用 gtk_list_store_set() 将首先创建一行,这将触发 GtkListStore 上的 GtkTreeModel::row-inserted 信号。但是,该行仍然是空的,并且连接到此特定存储区上的 GtkTreeModel::row-inserted 的任何信号处理程序都应准备好应对该行可能为空的情况。如果您将 GtkListStore 封装在 GtkTreeModelFilter 中并使用 GtkTreeModelFilterVisibleFunc,这一点尤其重要。对 GtkListStore 使用任何非原子性操作来追加行将导致 GtkTreeModelFilterVisibleFunc 首先被带有空行的访问;该函数必须为此做好准备。
GtkListStore 作为 GtkBuildable
GtkBuildable 接口的 GtkListStore 实现允许通过可能包含多个 <column> 元素(分别指定一个模型列)的 <columns> 元素指定模型列。“type”属性指定列的数据类型。
此外,还可以在 <data> 元素中指定 UI 定义中列表存储空间的内容。它可以包含多个 <row> 元素,每个元素指定列表模型一行的内容。在 <row> 内部,<col> 元素指定单个单元格的内容。
请注意,在代码中定义模型可能更常见,并且可以将指定 UI 定义(数据而非表示形式)中列表存储空间的内容视为图层违规,而通用的做法是尽可能将两者分开。
列表存储空间的 UI 定义片段的示例
<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>
已弃用: 4.10
请改用GListStore。
实例方法
gtk_list_store_append
将新行追加到 list_store 中。iter 将更改为指向此新行。调用此函数后,该行将为空。为填充值,需要调用 gtk_list_store_set() 或者 gtk_list_store_set_value()。
已弃用:4.10
gtk_list_store_insert
在 position 创建新行。iter 将更改为指向此新行。如果 position 为 -1 或大于列表中的行数,则新行将追加到列表中。调用此函数后,该行将为空。为填充值,需要调用 gtk_list_store_set() 或者 gtk_list_store_set_value()。
已弃用:4.10
gtk_list_store_insert_after
在 sibling 之后插入新行。如果 sibling 为 NULL,则该行将预先追加到列表的开头。iter 将更改为指向此新行。调用此函数后,该行将为空。为填充值,需要调用 gtk_list_store_set() 或者 gtk_list_store_set_value()。
已弃用:4.10
gtk_list_store_insert_before
在 sibling 前插入新行。如果 sibling 为 NULL,那么该行将被追加到列表结尾。iter 将更改为指向此新行。调用此函数后该行将为空。要填写值,您需要调用 gtk_list_store_set() 或 gtk_list_store_set_value()。
已弃用:4.10
gtk_list_store_insert_with_values
在 position 处创建新行。iter 将更改为指向此新行。如果 position 为 -1,或大于列表中的行数,那么新行将被追加到列表中。该行将使用提供给此函数的值填充。
已弃用:4.10
gtk_list_store_insert_with_valuesv
gtk_list_store_insert_with_values() 的一种变体,其中列和值作为两个数组,而不是可变参数。
已弃用:4.10
gtk_list_store_move_after
将 store 中的 iter 移动到 position 后的位置。请注意此函数仅适用于未排序存储区。如果 position 为 NULL,iter 将移动到列表开头。
已弃用:4.10
gtk_list_store_move_before
将 store 中的 iter 移动到 position 之前的位置。请注意此函数仅适用于未排序存储区。如果 position 为 NULL,iter 将移动到列表末尾。
已弃用:4.10
gtk_list_store_prepend
向 list_store 开头添加新行。iter 将更改为指向此新行。调用此函数后该行将为空。要填写值,您需要调用 gtk_list_store_set() 或 gtk_list_store_set_value()。
已弃用:4.10
gtk_list_store_set
设置 iter 引用的行中一个或多个单元格的值。可变参数列表应包含整数列号,每个列号后跟要设置的值。列表以 -1 结尾。例如,若要将类型为 G_TYPE_STRING 的第 0 列设置为“Foo”,应编写 gtk_list_store_set (store, iter, 0, "Foo", -1)。
已弃用:4.10
gtk_list_store_set_valuesv
gtk_list_store_set_valist() 的一种变体,其中列和值作为两个数组,而不是可变参数。此函数主要用于语言绑定和在运行时之前不知道要更改的列数的情况下。
已弃用:4.10
Methods inherited from GtkBuildable (1)
Methods inherited from GtkTreeDragDest (2)
gtk_tree_drag_dest_drag_data_received
要求 GtkTreeDragDest 在 paths dest 前插入一行,从 value 中获取行的内容。如果 dest 超出了树范围,以至于无法在之前插入,将返回 FALSE。此外,由于某些特定于模型的原因,可能返回 FALSE。应准确处理不再在该模型中发现的 dest!
已弃用:4.10
gtk_tree_drag_dest_row_drop_possible
确定能否将元素拖放到给定的 dest_path 之前,深度和 dest_path 相同。例如,我们是否能将 value 中的数据拖放到该位置。dest_path 并非必须存在;如果 dest_path 的父级不存在,则返回值几乎可以肯定为 FALSE。
已弃用:4.10
从 GtkTreeDragSource 继承的方法 (3)
gtk_tree_drag_source_drag_data_delete
要求 GtkTreeDragSource 删除 path 处的行,因为它已通过拖放移动到其他位置。如果因 path 不再存在,或出于模型特定原因导致删除失败,将返回 FALSE。应准确处理不再在该模型中发现的 path!
已弃用:4.10
gtk_tree_drag_source_drag_data_get
要求 GtkTreeDragSource 返回一个表示 path 处的行的 GdkContentProvider。应准确处理不再在该模型中发现的 path!
已弃用:4.10
gtk_tree_drag_source_row_draggable
要求 GtkTreeDragSource 提供特定的行是否可以用作 DND 操作的来源。如果来源未实施该接口,则该行可视为可拖放。
已弃用:4.10
从 GtkTreeModel 继承的方法 (28)
请参阅 GtkTreeModel 以获得全部方法列表。
从 GtkTreeSortable 继承的方法 (6)
gtk_tree_sortable_get_sort_column_id
使用当前的排序列和顺序填充 sort_column_id 和 order。它返回 TRUE,除非 sort_column_id 为 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID 或 GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID。
已弃用:4.10
gtk_tree_sortable_has_default_sort_func
如果模型具有默认排序功能,则返回 TRUE。这主要由 GtkTreeViewColmuns 用来确定模型是否可以返回默认状态。
已弃用:4.10
gtk_tree_sortable_set_default_sort_func
设置在排序时使用的默认比较函数,即 sort_func。如果 sortable 的当前排序列 ID 为 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,则模型将使用该函数进行排序。
已弃用:4.10
gtk_tree_sortable_set_sort_column_id
将当前排序列设置为 sort_column_id。sortable 将重新对自身进行排序以反映该更改,之后会发出 GtkTreeSortable::sort-column-changed 信号。sort_column_id 可以是常规列 ID,也可以是以下特殊值之一:.
已弃用:4.10
gtk_tree_sortable_set_sort_func
设置在排序时使用的比较函数,即 sort_func。如果 sortable 的当前排序列 ID 与 sort_column_id 相同,则模型将使用该函数进行排序。
已弃用:4.10
gtk_tree_sortable_sort_column_changed
在 sortable 上发出 GtkTreeSortable::sort-column-changed 信号。
已弃用:4.10
信号
从 GObject 继承的信号 (1)
GObject::notify
当对象的一个属性通过 g_object_set_property()、g_object_set() 等设置其值时,该对象将发出 notify 信号。
从 GtkTreeModel 继承的信号 (5)
GtkTreeModel::row-changed
当模型中的某一行已 更改时,将发出此信号。
GtkTreeModel::row-deleted
当行已被 删除时,将发出此信号。
GtkTreeModel::row-has-child-toggled
当行获取其第一个子行或失去其最后一个子 行时,将发出此信号。
GtkTreeModel::row-inserted
当模型中已插入一行新行时,将发出此信号。
GtkTreeModel::rows-reordered
当 GtkTreeModel 中某节点的子项已 重新排序时,将发出此信号。
从 GtkTreeSortable 继承的信号 (1)
GtkTreeSortable::sort-column-changed
当排序列或 sortable 的排序顺序发生更改时,将发出 ::sort-column-changed 信号。该信号将在 sortable 内容进行 重新排序前发出。