首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gtk.Combobox显示两列(而不是1),为什么?

Gtk.Combobox显示两列(而不是1),为什么?
EN

Stack Overflow用户
提问于 2021-01-27 12:27:55
回答 1查看 92关注 0票数 0

我知道GTK-2现在是“古董”了。我有一个旧的程序,我必须修改,它太大,转换到GTK-3的时间我有。这就是问题所在:

我添加了一个带有2列( G_TYPE_STRING).

  • For和G_TYPE_INT)的ComboBox,这两个列都显示在ComboBox上,尽管我认为下面所示的代码只分配了一个.

代码语言:javascript
复制
    void
    fill_list(GtkComboBox *cbbox)
    {
      GtkListStore *store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING);
      GtkTreeIter iter;
      GtkCellRenderer *renderer = gtk_cell_renderer_text_new();


      gtk_combo_box_set_model(cbbox, GTK_TREE_MODEL(store));
      gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cbbox), renderer, TRUE);
      gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbbox), renderer,
                                   "text", 0, NULL);
      gtk_combo_box_set_entry_text_column(cbbox, 0);
      gtk_list_store_append(store, &iter);
      //                               Col 0  Col 1
      gtk_list_store_set(store, &iter, 0, 0,  1, "Kind 1", -1);
      gtk_list_store_append(store, &iter);
      gtk_list_store_set(store, &iter, 0, 1,  1, "Kind 2", -1);
      gtk_list_store_append(store, &iter);

这是在小部件的“实现”信号上调用的函数的一部分。改变.“文字”,0.到.“文本”,1.按照预期,将ComboBox的第二列更改为ListStore的第二列。

但是,由于未知的原因,我无法摆脱第一列。我已经扫描了整个项目的代码迹象,可能会影响-没有运气。该接口使用Glade-2生成。

在过去的几年里,我在Python中工作得更多,所以我怀疑我在这里遗漏了一些东西。我甚至在Python中测试了这段代码,没有问题。

我很感激你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 13:59:14

问题解决了!

当被要求添加GtkComboBox时,我发现Glade 2实际上插入了一个GtkComboBoxText (尽管在组件编辑器中它显示为GtkComboBox类型)。我只在浏览自动生成的interface.c代码时检测到这一点。

这将创建一个小部件,其中包含一个“模型”,并且(我怀疑)必要的代码来呈现该模型中的单个列(用于“text”)。添加新列时,通过设置另一个模型,(原始)呈现器将呈现第一列。

要摆脱原始呈现器,解决方案似乎是调用gtk_cell_layout_clear,然后添加新的模型+呈现器:

代码语言:javascript
复制
gtk_cell_layout_clear(GTK_CELL_LAYOUT(cbbox));

realize事件处理程序中为ComboBox执行此操作,不要修改interface.c,因为它将被覆盖。

不过,我不确定这是否足以将任何内存释放到原始渲染器中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65919175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档