如何在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
相关产品推荐
相关产品推荐

