如何为GTK4的FileDialog添加FileFilter?
如何为GTK4的FileDialog正确添加FileFilter
你遇到的问题是因为gtk_file_dialog_set_filters()需要接收GListModel类型的参数,而不是单个GtkFileFilter对象。要解决这个问题,你需要把过滤器对象放到一个列表模型中(比如GListStore,它是GListModel的常用实现),再传递给对话框。
以下是修正后的完整代码:
GtkFileDialog* fileDialog = gtk_file_dialog_new(); // 创建过滤器 GtkFileFilter* filefilter = gtk_file_filter_new(); gtk_file_filter_add_suffix(filefilter, "tsc"); gtk_file_filter_set_name(filefilter, "Simple"); // 创建存储过滤器的列表模型,指定元素类型为GtkFileFilter GListStore* filter_store = g_list_store_new(GTK_TYPE_FILE_FILTER); // 将过滤器添加到列表中 g_list_store_append(filter_store, filefilter); // 将列表模型设置给对话框 gtk_file_dialog_set_filters(fileDialog, G_LIST_MODEL(filter_store)); // 记得在不需要时释放资源(根据你的内存管理逻辑) g_object_unref(filter_store);
补充说明:
- 如果需要添加多个过滤器,只需重复调用
g_list_store_append()添加更多GtkFileFilter对象即可。 GListStore是GTK中用于存储列表数据的基础容器,完全符合GListModel的要求,适合用来传递多个过滤器给GtkFileDialog。
内容的提问来源于stack exchange,提问作者kriptonus
相关产品推荐
相关产品推荐

