我正在尝试使用 Gtk 和 glade 构建一个 helloworld 窗口。代码编译正常,但在运行时它在 gtk_builder_add_from_file 上失败。奇怪的是,错误报告的当前 gtk 版本与我使用 gtk_get_major_version/gtk_get_minor_version 获得的版本不同。
GtkBuilder *builder;
GtkWidget *window;
GError *err = NULL;
gtk_init(NULL,NULL);
printf("maj %d, min %d\n",gtk_get_major_version (),gtk_get_minor_version ());
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "/path/to/ui.glade", &err);
if (err != NULL)
{
printf ("%s\n", err->message);
g_error_free (err);
}
window = GTK_WIDGET(gtk_builder_get_object(builder, "mywin"));
gtk_widget_show(window);
g_object_unref(builder);
gtk_main();
...
标准输出:
maj 3, min 2
/path/to/ui.glade: required gtk+ version 3.2, current version is 2.24
最佳答案
毫无疑问,glade 文件是使用 Glade 3.x 创建的,而您的应用程序是针对 Gtk 版本 2.x 编译的。
如果您已经在计算机上创建了 glade 文件,那么您很可能同时拥有 Gtk 2 和 Gtk 3 的运行时文件和开发人员文件。
如果是这样,那么您必须更改您的编译指令以链接到 Gtk 3。为此检查您的 pkg-config
指令并检查它是 gtk+-2.0 还是 gtk+-3.0。它很可能会说 gtk+-2.0,更改为 gtk+-3.0。
也有可能您没有安装 gtk3 开发包,如果有,请安装它们。
Glade XML 文件保留对所需的最低 gtk 版本的引用,更改它可能会“解决”问题,但如果您使用仅在 gtk 3 上可用的小部件,它将不起作用。
另一种选择是安装 Glade 2,但最好使用最新的 Gtk 版本,因为其他版本都比较旧。
同时检查您的 glade 菜单,File > Properties 并检查所需的 Toolkit 版本。
关于c - Gtk 和 gtk builder 显示不同的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630296/