You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GTK4中使用模型将字符串填充到DropDown组件中?

Gtk DropDown 填充 GHashTable 字符串键的简单实现

最直接的方案是把GList里的字符串键转换成GtkStringList(它是GListModel的现成实现,专门用来存字符串),然后直接绑定到GtkDropDown,不需要复杂的工厂配置——GtkDropDown默认会用字符串对应的渲染逻辑。

完整代码示例

// 假设你已经有了初始化好的GHashTable *my_hash
GList *keylist = g_hash_table_get_keys(my_hash);

// 创建GtkStringList容器
GtkStringList *string_list = gtk_string_list_new(NULL);

// 遍历GList,把每个字符串键添加到GtkStringList
for (GList *l = keylist; l != NULL; l = l->next) {
    const char *key = l->data;
    gtk_string_list_append(string_list, key);
}

// 释放g_hash_table_get_keys返回的GList(必须手动释放)
g_list_free(keylist);

// 创建或获取你的GtkDropDown实例
GtkDropDown *dropdown = GTK_DROP_DOWN(gtk_drop_down_new());

// 把GtkStringList设置为DropDown的模型
gtk_drop_down_set_model(dropdown, G_LIST_MODEL(string_list));

// 因为GtkDropDown会持有模型的引用,这里可以unref释放我们的所有权
g_object_unref(string_list);

关键说明

  • GtkStringList是GTK提供的轻量字符串列表模型,完美适配单字符串场景,不需要自己写ListModel实现或复杂的ListItemFactory。
  • 内存注意:g_hash_table_get_keys返回的GList必须手动调用g_list_free释放;GtkStringList是GObject,gtk_drop_down_set_model会自动增加它的引用计数,所以我们可以在设置后调用g_object_unref释放自己持有的引用。
  • 如果后续哈希表的键有更新,只需重复上述步骤重新生成GtkStringList并设置给DropDown即可。

内容的提问来源于stack exchange,提问作者9-Pin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:57:08