【问题标题】:How to copy or duplicate gtk widgets?如何复制或复制 gtk 小部件?
【发布时间】:2010-04-15 13:51:26
【问题描述】:

如何复制或复制 gtk 小部件? 在我的应用程序中,我创建了一个巨大的 GtkComboBox,其中有一个很长的 for 循环,它占用了很多时间,我在一个屏幕的两个地方使用这个组合。

所以,我想做的是一次创建这个组合,然后将其复制/复制到另一个组合中,这样可以节省我的时间。

如果我尝试两次添加相同的组合框指针,gtk 会给我错误“child->paren != NULL”,因为 gtk 小部件中只能有一个父项。

那该怎么办?

【问题讨论】:

标签: c gtk


【解决方案1】:

这就是为什么 GTK+ 中许多显示数据的小部件都是基于模型的。模型保存数据,而不是小部件。小部件充当数据的“视图”,模型可以在多个小部件之间共享。

您只需要在两个组合框中使用相同的模型:

GtkListStore *model;
GtkWidget *c1, *c2;

/* Set up the model. */
model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INTEGER); /* Or whatever. */

/* Create first combo. */
c1 = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));

/* Create second combo. */
c2 = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));

【讨论】:

  • 所以我需要创建 GtkListModel 然后用这个模型创建 2 个单独的组合框。但是在创建模型时,我使用了这些函数调用 cell = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo_box), 单元格, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), 单元格, "pixbuf",0, NULL);在创建列表模型时,我们需要为gtk_cell_layout_set_attributesgtk_cell_layout_pack_start 函数调用使用combo_box 指针。如何处理这个,你能提供一个例子吗?我在下拉列表文本和图像中有 2 列。
  • @PP:这些调用都没有触及模型,所以没有问题。您将需要复制代码来构建自定义渲染器,但您仍然应该能够重用模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多