Glade treeview liststore 数据不可见,无法想象为啥

Posted

技术标签:

【中文标题】Glade treeview liststore 数据不可见,无法想象为啥【英文标题】:Glade treeview liststore data not visible, can't imagine whyGlade treeview liststore 数据不可见,无法想象为什么 【发布时间】:2010-11-29 20:27:36 【问题描述】:

我有 99% 44/100 的一切正常工作。我有一个林间空地文件,我使用 gtkbuilder 来渲染它,瞧它出现了。除了我的树视图列表存储中的数据之外的所有内容。 我注意到默认情况下树视图是不可见的,将其设置为 true 会使树视图区域中出现一个框,但我无法让我的任何列表存储项目显示在树视图中。 我在 glade 中定义的列表存储中有一些默认数据,我也以编程方式添加了一些,但没有任何显示。我缺少一些可见的开/关选项吗?

【问题讨论】:

据我所知,gtkbuilder 没有为我的列(定义为 gchararray)提供单元渲染器,因为当我调用 get_column_cell_renderer 时,我得到了 NULL。 那么如何在 gtkbuilder 创建的列中设置单元格渲染器? 【参考方案1】:

要将单元格渲染器添加到 Glade 中的树视图,请右键单击树视图并选择“编辑”。这将打开树视图编辑器。如果单击“层次结构”选项卡,则可以添加或删除列。添加一列,然后右键单击它以获取可以添加的单元格渲染器菜单。这应该可以解决问题。

【讨论】:

天哪,它真的不必这么复杂。我想我做了一个糟糕的假设,即树的定义将由模型定义。我没有意识到您必须定义模型并在树控件中指定列。加格。非常感谢。我仍然没有得到文本,但至少我得到了列标题并且可以添加行。 得到它的工作,只需要指定单元格渲染器的文本来引用我的列表存储列数据。 javascript中你可以 var n = document.createElement('option'); 这似乎是错误的。 n.text = 选择文本; n.value = 选择值; document.getElementById("listbox").options.add(n);它有效。 这是因为在 GTK+ 中视图和模型是分开的。您可以对同一数据有多个视图,并在每个视图中显示一组不同的列。 在当前版本的 Glade 中,“编辑”现在位于工具栏而不是右键菜单中。【参考方案2】:

只是为了补充 ptomato 所说的内容,我想我会在 xml 中加入我所拥有的内容:

<object class="GtkTreeView" id="portfolio_treeview">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="model">portfolio_liststore</property>
    <property name="search_column">0</property>
    <child>
      <object class="GtkTreeViewColumn" id="treeviewcolumn4">
        <property name="title">ID</property>
        <property name="clickable">True</property>
        <property name="sort_indicator">True</property>
        <property name="sort_column_id">0</property>
        <child>
          <object class="GtkCellRendererText" id="cellrenderertext4"/>
          <attributes>
            <attribute name="text">0</attribute>
          </attributes>
        </child>
      </object>
    </child>
</object>

【讨论】:

我还没有弄清楚如何/在哪里设置“文本”属性;虽然编辑文件以添加属性有效! 林间空地编辑器似乎没有自动添加可能导致原始问题的属性。将 cellrenderer 的文本字段设置为要使用的商店列的索引可以解决问题。否则渲染器不会查找值。【参考方案3】:

我想通了...使用 glade 添加“'text' 属性”,以便您可以查看位于列表存储中的数据...。

1) 右键单击​​您的树形视图并选择“编辑”

2) 点击“层次”标签

3)右键单击您添加的列并选择“添加子文本”

4) 在“文本:”旁边的窗口右侧,将未设置更改为列表存储/列文本类型。

【讨论】:

以上是关于Glade treeview liststore 数据不可见,无法想象为啥的主要内容,如果未能解决你的问题,请参考以下文章

Gtkmm3 TreeView ListStore.Clear 或 TreeSelection.unselectAll 导致错误

GTK Glade C - Treeview选择奇怪的段错误

简单列表框

如何将 ComboBox 添加到 TreeView 列?

是否可以指示 `Gtk::TreeView` 显示自定义类型?

为啥 Gdk::Pixbufs 在 Gtk::TreeView 中不可见?