接口

GtkCellLayout

已弃用: 4.10 

描述 [src]

interface Gtk.CellLayout : GObject.Object

用于打包单元格的接口

GtkCellLayout 是一个接口,由希望为打包单元格、设置属性和数据函数提供类似于 GtkTreeViewColumnAPI 的所有对象实现。

GtkCellLayout 实现提供的显着特性之一是属性。通过属性,你可以以灵活的方式设置属性。它们可以像常规属性一样仅设置为常数值。但它们也可以映射到基础树模型中的一列,方法是使用 gtk_cell_layout_set_attributes(),这意味着当单元格渲染器渲染属性时,属性的值可以随单元格的不同而发生变化。最后,可以使用 gtk_cell_layout_set_cell_data_func() 指定一个函数,在渲染的每个单元格中调用此函数以确定属性的值。

GtkCellLayout 作为 GtkBuildable

GtkCellLayout 的实现,它还实现了 GtkBuildable 接口(GtkCellViewGtkIconViewGtkComboBoxGtkEntryCompletionGtkTreeViewColumn)接受 GtkCellRenderer 对象作为 UI 定义中 <child> 元素。它们支持其子元素的自定义 <attributes> 元素,该元素可以包含多个 <attribute> 元素。每个 <attribute> 元素都有一个名称属性,它指定单元格渲染器的属性;元素的内容是属性值。

下面是指定属性的 UI 定义片段的示例

<object class="GtkCellView">
  <child>
    <object class="GtkCellRendererText"/>
    <attributes>
      <attribute name="text">0</attribute>
    </attributes>
  </child>
</object>

此外,对于使用 GtkCellArea 布局单元格的 GtkCellLayout 实现(GTK 中的所有 GtkCellLayout 都使用 GtkCellArea)单元格属性也可以通过通过指定自定义的 <cell-packing> 属性来定义此格式,该属性可以包含多个 <property> 元素。

下面是指定单元格属性的 UI 定义片段

<object class="GtkTreeViewColumn">
  <child>
    <object class="GtkCellRendererText"/>
    <cell-packing>
      <property name="align">True</property>
      <property name="expand">False</property>
    </cell-packing>
  </child>
</object>

子类化 GtkCellLayout 实现

在子类化实现 GtkCellLayout 的窗口小部件(如 GtkIconViewGtkComboBox)时,需要考虑这些窗口小部件内部使用 GtkCellArea 的事实。这些窗口小部件会将单元格区域显示为仅构造的属性。这意味着可以执行以下操作,

GtkWIdget *combo =
  g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", my_cell_area, NULL);

例如,使用自定义单元格区域与组合框。但仅在实例 init() 函数运行后才会初始化构造属性,这意味着在子类 init() 函数中使用依赖于单元格区域存在的函数将导致实例化默认单元格区域。在这种情况下,将忽略提供的构造属性值(并会显示警告,提醒您出现该问题)。

static void
my_combo_box_init (MyComboBox *b)
{
  GtkCellRenderer *cell;

  cell = gtk_cell_renderer_pixbuf_new ();

  // The following call causes the default cell area for combo boxes,
  // a GtkCellAreaBox, to be instantiated
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (b), cell, FALSE);
  ...
}

GtkWidget *
my_combo_box_new (GtkCellArea *area)
{
  // This call is going to cause a warning about area being ignored
  return g_object_new (MY_TYPE_COMBO_BOX, "cell-area", area, NULL);
}

如果您不重视通过派生窗口小部件支持其他单元格区域,则不必为此感到担忧。如果您想支持其他单元格区域,则可以通过将存在问题的调用从 init() 移动到您类的 constructor() 中来支持。

已弃用:4.10

列表视图使用窗口小部件显示其内容。请参阅 GtkLayoutManager 以了解布局管理器委托对象。

先决条件

为实现 CellLayout,您的类型必须从GObject继承。

实例方法

gtk_cell_layout_add_attribute

cell_layout 中的列表添加一个属性映射。

已弃用: 4.10 

gtk_cell_layout_clear

取消设置 cell_layout 上所有渲染器上的所有映射,并从 cell_layout 中移除所有渲染器。

已弃用: 4.10 

gtk_cell_layout_clear_attributes

清除以前使用 gtk_cell_layout_set_attributes() 设置的所有现有属性。

已弃用: 4.10 

gtk_cell_layout_get_area

返回基础的 GtkCellArea,如果在 GtkCellArea 上调用,则可能是 cell_layout;如果 cell_layout 未使用 GtkCellArea,则可能是 NULL

已弃用: 4.10 

gtk_cell_layout_get_cells

返回已添加到 cell_layout 的单元格渲染器。

已弃用: 4.10 

gtk_cell_layout_pack_end

cell 添加到 cell_layout 的末尾。如果 expandFALSE,则 cell 分配的空间仅为其所需空间。所有未使用的空间都在 expandTRUE 的单元格中平均分配。

已弃用: 4.10 

gtk_cell_layout_pack_start

cell 封装到 cell_layout 的开头。如果 expandFALSE,则 cell 分配的空间仅为其所需空间。所有未使用的空间都在 expandTRUE 的单元格中平均分配。

已弃用: 4.10 

gtk_cell_layout_reorder

position 重新插入 cell

已弃用: 4.10 

gtk_cell_layout_set_attributes

将参数列表中的属性设置为 cell_layout 的属性。

已弃用: 4.10 

gtk_cell_layout_set_cell_data_func

设置要用于 cell_layoutGtkCellLayoutDataFunc。

已弃用: 4.10 

接口结构

struct GtkCellLayoutIface {
  void (* pack_start) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    gboolean expand
  );
  void (* pack_end) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    gboolean expand
  );
  void (* clear) (
    GtkCellLayout* cell_layout
  );
  void (* add_attribute) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    const char* attribute,
    int column
  );
  void (* set_cell_data_func) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    GtkCellLayoutDataFunc func,
    gpointer func_data,
    GDestroyNotify destroy
  );
  void (* clear_attributes) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell
  );
  void (* reorder) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    int position
  );
  GList* (* get_cells) (
    GtkCellLayout* cell_layout
  );
  GtkCellArea* (* get_area) (
    GtkCellLayout* cell_layout
  );
  
}

没有说明。

接口成员
pack_start
void (* pack_start) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    gboolean expand
  )
 

将单元格封装到 cell_layout 的开头。

pack_end
void (* pack_end) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    gboolean expand
  )
 

将单元格添加到 cell_layout 的末尾。

clear
void (* clear) (
    GtkCellLayout* cell_layout
  )
 

取消设置 cell_layout 上所有渲染器上的所有映射,并从 cell_layout 中移除所有渲染器。

add_attribute
void (* add_attribute) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    const char* attribute,
    int column
  )
 

向 cell_layout 中的列表添加一个属性映射。

set_cell_data_func
void (* set_cell_data_func) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    GtkCellLayoutDataFunc func,
    gpointer func_data,
    GDestroyNotify destroy
  )
 

设置要用于 cell_layout 的 GtkCellLayoutDataFunc。

clear_attributes
void (* clear_attributes) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell
  )
 

清除以前使用 gtk_cell_layout_set_attributes() 设置的所有现有属性。

reorder
void (* reorder) (
    GtkCellLayout* cell_layout,
    GtkCellRenderer* cell,
    int position
  )
 

在 position 重新插入单元格。

get_cells
GList* (* get_cells) (
    GtkCellLayout* cell_layout
  )
 

获取已添加到 cell_layout 的单元格渲染器。

get_area
GtkCellArea* (* get_area) (
    GtkCellLayout* cell_layout
  )
 

获取基础 GtkCellArea,如果在 GtkCellArea 中调用,可能是 cell_layout,也可能为 NULL(如果 cell_layout 未使用 GtkCellArea)。

虚拟方法

Gtk.CellLayout.add_attribute

cell_layout 中的列表添加一个属性映射。

已弃用: 4.10 

Gtk.CellLayout.clear

取消设置 cell_layout 上所有渲染器上的所有映射,并从 cell_layout 中移除所有渲染器。

已弃用: 4.10 

Gtk.CellLayout.clear_attributes

清除以前使用 gtk_cell_layout_set_attributes() 设置的所有现有属性。

已弃用: 4.10 

Gtk.CellLayout.get_area

返回基础的 GtkCellArea,如果在 GtkCellArea 上调用,则可能是 cell_layout;如果 cell_layout 未使用 GtkCellArea,则可能是 NULL

已弃用: 4.10 

Gtk.CellLayout.get_cells

返回已添加到 cell_layout 的单元格渲染器。

已弃用: 4.10 

Gtk.CellLayout.pack_end

cell 添加到 cell_layout 的末尾。如果 expandFALSE,则 cell 分配的空间仅为其所需空间。所有未使用的空间都在 expandTRUE 的单元格中平均分配。

已弃用: 4.10 

Gtk.CellLayout.pack_start

cell 封装到 cell_layout 的开头。如果 expandFALSE,则 cell 分配的空间仅为其所需空间。所有未使用的空间都在 expandTRUE 的单元格中平均分配。

已弃用: 4.10 

Gtk.CellLayout.reorder

position 重新插入 cell

已弃用: 4.10 

Gtk.CellLayout.set_cell_data_func

设置要用于 cell_layoutGtkCellLayoutDataFunc。

已弃用: 4.10