GtkTreeModelSort

已弃用:4.10 

说明 [src]

class Gtk.TreeModelSort : GObject.Object
  implements Gtk.TreeDragSource, Gtk.TreeModel, Gtk.TreeSortable {
  /* No available fields */
}

一个 GtkTreeModel 它使得底层树模型可排序

GtkTreeModelSort 是一个实现 GtkTreeSortable 接口的模型。它不持有任何数据本身,而是创建一个带有子模型并代理其数据的模型。它具有与其子模型相同的列类型,并且子模型中的更改将传播。此模型的主要目的是提供一种方法来对不同的模型进行排序,而无需修改该模型。请注意,GtkTreeModelSort 使用的排序函数不保证 稳定。

通过一个示例可以最好地说明其用法。在下面的示例代码中,我们创建了两个 GtkTreeView 小部件,它们都具有对相同数据的视图。由于此处模型是由 GtkTreeModelSort 封装的,这两个 GtkTreeView 可以分别对它们的数据视图进行排序,而不会影响另一个。相反,如果我们简单地将同一个模型放入每个小部件,则对第一个进行排序会对 第二个进行排序。

使用 GtkTreeModelSort

{
  GtkTreeView *tree_view1;
  GtkTreeView *tree_view2;
  GtkTreeModel *sort_model1;
  GtkTreeModel *sort_model2;
  GtkTreeModel *child_model;

  // get the child model
  child_model = get_my_model ();

  // Create the first tree
  sort_model1 = gtk_tree_model_sort_new_with_model (child_model);
  tree_view1 = gtk_tree_view_new_with_model (sort_model1);

  // Create the second tree
  sort_model2 = gtk_tree_model_sort_new_with_model (child_model);
  tree_view2 = gtk_tree_view_new_with_model (sort_model2);

  // Now we can sort the two models independently
  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model1),
                                        COLUMN_1, GTK_SORT_ASCENDING);
  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model2),
                                        COLUMN_1, GTK_SORT_DESCENDING);
}

为了演示如何从排序模型访问底层子模型,下一个示例将是 GtkTreeSelection GtkTreeSelection::changed 信号的回调。在此回调中,我们从模型的 COLUMN_1 中获取一个字符串。然后,我们修改字符串,在子模型上找到相同选定的行,并更改那里的行 。

从选择更改回调中访问子模型

void
selection_changed (GtkTreeSelection *selection, gpointer data)
{
  GtkTreeModel *sort_model = NULL;
  GtkTreeModel *child_model;
  GtkTreeIter sort_iter;
  GtkTreeIter child_iter;
  char *some_data = NULL;
  char *modified_data;

  // Get the current selected row and the model.
  if (! gtk_tree_selection_get_selected (selection,
                                         &sort_model,
                                         &sort_iter))
    return;

  // Look up the current value on the selected row and get
  // a new value to change it to.
  gtk_tree_model_get (GTK_TREE_MODEL (sort_model), &sort_iter,
                      COLUMN_1, &some_data,
                      -1);

  modified_data = change_the_data (some_data);
  g_free (some_data);

  // Get an iterator on the child model, instead of the sort model.
  gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (sort_model),
                                                  &child_iter,
                                                  &sort_iter);

  // Get the child model and change the value of the row. In this
  // example, the child model is a GtkListStore. It could be any other
  // type of model, though.
  child_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
  gtk_list_store_set (GTK_LIST_STORE (child_model), &child_iter,
                      COLUMN_1, &modified_data,
                      -1);
  g_free (modified_data);
}

已弃用版本:4.10

请使用 GtkSortListModel 。

层次结构

hierarchy this GtkTreeModelSort implements_0 GtkTreeDragSource this--implements_0 implements_1 GtkTreeModel this--implements_1 implements_2 GtkTreeSortable this--implements_2 ancestor_0 GObject ancestor_0--this

祖先

构造函数

gtk_tree_model_sort_new_with_model

创建一个新的 GtkTreeModelSort,其中 child_model 作为子 模型。

实例方法

gtk_tree_model_sort_clear_cache

此函数几乎永远不会被调用。它清除 tree_model_sort的任何尚未使用 gtk_tree_model_ref_node() 引用过的缓存迭代器。如果正在排序的子模型是静态的(并且不经常更改),并且对节点有很多未引用的访问,这可能会很有用。此函数的副作用是,所有未引用的迭代器将 无效。

已弃用:4.10 

gtk_tree_model_sort_convert_child_iter_to_iter

设置 sort_iter 指向 tree_model_sort 中与 child_iter 指向的行相对应的行。如果 sort_iter 未设置,则返回 FALSE 。注意:自 2.14 起才返回 布尔值。

已弃用:4.10 

gtk_tree_model_sort_convert_child_path_to_path

child_path 转换为相对于 tree_model_sort 的路径。也就是说,child_path 指向子模型中的路径。返回的路径将指向排序模型中的同一行。如果 child_path 不是子模型上的有效路径,则返回 NULL

已弃用:4.10 

gtk_tree_model_sort_convert_iter_to_child_iter

child_iter 设置为指向 sorted_iter 指向的行。

已弃用:4.10 

gtk_tree_model_sort_convert_path_to_child_path

sorted_path 转换为 tree_model_sort 的子模型上的路径。也就是说,sorted_path 指向 tree_model_sort 中的位置。返回的路径将指向未排序模型中相同的位置。如果 sorted_path 未指向子模型中的位置,则返回 NULL

已弃用:4.10 

gtk_tree_model_sort_get_model

返回 GtkTreeModelSort 正在排序的模型。

gtk_tree_model_sort_iter_is_valid

此函数很慢。仅将其用于调试和/或测试目的。

已弃用:4.10 

gtk_tree_model_sort_reset_default_sort_func

这将默认排序函数重置为“未排序”状态。也就是说,它与子模型的顺序相同。仅当 GtkTreeModelSort 处于“未排序”状态时,它才会重新对模型进行排序,以使其与子模型处于相同的顺序。

已弃用:4.10 

GObject (43) 继承的方法

有关方法的完整列表,请参见 GObject

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_idorder。除非 sort_column_idGTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_IDGTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID,否则它将返回 TRUE

已弃用:4.10 

gtk_tree_sortable_has_default_sort_func

如果模型具有默认排序函数,则返回 TRUE。这主要由 GtkTreeViewColumns 用于确定模型是否可以返回默认状态。

已弃用: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。在发出 GtkTreeSortable::sort-column-changed 信号之后,sortable 将重新进行排序以反映此更改。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 

属性

Gtk.TreeModelSort:model

树模型排序的模型。

信号

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

::sort-column-changed 信号在更改 sortable 的排序列或排序顺序时发出。此信号在对 sortable 的内容重新排序之前发出。

类结构

struct GtkTreeModelSortClass {
  GObjectClass parent_class;
  
}

暂无说明。

类成员
parent_class: GObjectClass

暂无说明。