我知道GTK-2现在是“古董”了。我有一个旧的程序,我必须修改,它太大,转换到GTK-3的时间我有。这就是问题所在:
我添加了一个带有2列( G_TYPE_STRING).
。
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中测试了这段代码,没有问题。
我很感激你的建议!
发布于 2021-02-04 13:59:14
问题解决了!
当被要求添加GtkComboBox时,我发现Glade 2实际上插入了一个GtkComboBoxText (尽管在组件编辑器中它显示为GtkComboBox类型)。我只在浏览自动生成的interface.c代码时检测到这一点。
这将创建一个小部件,其中包含一个“模型”,并且(我怀疑)必要的代码来呈现该模型中的单个列(用于“text”)。添加新列时,通过设置另一个模型,(原始)呈现器将呈现第一列。
要摆脱原始呈现器,解决方案似乎是调用gtk_cell_layout_clear,然后添加新的模型+呈现器:
gtk_cell_layout_clear(GTK_CELL_LAYOUT(cbbox));在realize事件处理程序中为ComboBox执行此操作,不要修改interface.c,因为它将被覆盖。
不过,我不确定这是否足以将任何内存释放到原始渲染器中。
https://stackoverflow.com/questions/65919175
复制相似问题