有人可以解释一下,如何添加FileFilter到FileDialog GTK 4?

我想,我做了一个错误的决定,它不起作用.

我创建了GTKFileFilter * 对象,并试图将其添加到GTKFileDialog * 对象中:

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");
gtk_file_dialog_set_filters(fileDialog,filefilter);

但是gtk_file_dialog_set_filters()个期望一个GListModel * 作为第二个参数,所以我得到了断言:

Gtk—CRITICAL **:09:44:48.986:gtk_file_dialog_set_filters:assert 'filters == NULL|| G_IS_LIST_MODEL(filters)'失败

如何创建一个正确的过滤器?

推荐答案

我试过了,这是我的建议.

#include<gtk/gtk.h>


  GtkFileDialog *filedialog = gtk_file_dialog_new();

  GtkFileFilter* filefilter = gtk_file_filter_new();
  gtk_file_filter_add_suffix(filefilter,"txt");
  gtk_file_filter_set_name(filefilter,"Text");

  GtkFileFilter *filefilter1 = gtk_file_filter_new();
  gtk_file_filter_add_suffix(filefilter1,"c");
  gtk_file_filter_set_name(filefilter1,"c-file");

  GListStore* liststore = g_list_store_new (GTK_TYPE_FILE_FILTER);
  g_list_store_append(liststore, filefilter);
  g_list_store_append(liststore, filefilter1);

  gtk_file_dialog_set_filters(filedialog,G_LIST_MODEL(liststore));

  gtk_file_dialog_open(filedialog,GTK_WINDOW(window),NULL,NULL,NULL);

列表模型的实现也可以在这里找到

https://stackoverflow.com/a/77759424/22768315

https://stackoverflow.com/a/78185115/22768315

https://stackoverflow.com/a/77619798/22768315

问候

C++相关问答推荐

生成C代码时自动复制/生成' tmwtypes.h '依赖项

char为16位且Short也为16位的c环境合法吗

在C中使用动态内存分配找到最小的负数

测量ARM MCU中断延迟的问题

从纯C中访问通用项对话框

LONG_DOUBLE_T是否存在(标准C:C23)

如何在c++中包装返回空*的函数

在C++中使用函数指针的正确语法

在WSL关闭/重新启动后,是什么原因导致共享对象依赖关系发生更改?

从TCP连接启动UDP(C套接字)

C:在编译时构建和使用字符串文字的预处理器宏?

Valgrind用net_pton()抱怨

try 查找带有指针的数组的最小值和最大值

STM32 FATFS用户手册(Um1721)中的代码正确吗?

带有数组指针的 struct 在print_stack()函数中打印随机数

传递给函数的 struct 中的数组

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

C Makefile - 如何避免重复提及文件名

当 a 是代码块时使用逗号运算符 (a, b)

如何在C中以0x格式打印十六进制值