如何控制在树的扩展行中可见的GTK小部件?

时间:2019-04-06 09:53:52

标签: treeview gtk gtk3 togglebutton

我正在用GTK3在C中构建一个树存储,其中始终显示主要行,然后单击主要行左侧的小三角形图标,其他辅助(子)行将在主。作为示例,请考虑主要行可以是目录,并且当它们展开时,下面的行将显示这些目录中的文件。我这样做是为了允许用户选择要删除的主要项目,而次要行仅是信息性的,例如,告诉目录中有哪些文件,因此他们将知道他们是否真的要删除整个文件。东西。

要启用选择删除功能,第一列包含一个GTK_CELL_RENDERER_TOGGLE,并且我有一个与复选框切换相关的回调。除了一件事,一切都很好。当用户单击小三角形项以扩展行时,主要行的大部分内容不会出现在次要行中(这是预期的和期望的),但是...复选框切换可以出现在第一栏中。尽管在目录/文件示例中可能有意义,但就我而言,考虑删除辅助行的内容是没有意义的。

构建辅助行时,我尝试过类似的事情:

gtk_tree_store_set(TS,&J,2,"filename",-1);

gtk_tree_store_set(TS,&J,0,NULL,2,"filename",-1);

希望将NULL切换为空,但无济于事。 GTK仍然显示一个复选框,可能只是将NULL解释为零。

是否有一种方法可以控制(在我的情况下为抑制)切换的显示?或更笼统地说,是否有一种干净的方法来控制在子行中显示哪些列?它似乎适用于TEXT,但不适用于TOGGLE。

稍后:有一个潜在有用的函数称为gtk_cell_renderer_set_visible(),但它需要引用单元格渲染器。当我在构建过程中只有GtkTreeStore和GtkTreeIter时,如何按行或按单元获取它?

1 个答案:

答案 0 :(得分:0)

(至少)有两种解决方案:

  1. 基类GtkCellRenderer具有visible属性。您可以在模型中添加额外的字段,以指示该行是否应显示“切换”。
  2. 如果模型中有 other 个字段指示是主行还是辅助行,但不是直接行,则可以使用gtk_tree_view_column_set_cell_data_func设置要在渲染前调用的函数。您可以在此处调用gtk_cell_renderer_set_visible或任何其他函数来手动设置渲染器的属性。