GtkAboutDialog图标没有加载?

时间:2014-02-11 05:36:01

标签: c gtk

我正在尝试向我的下一部分教程代码添加一个about对话框,但由于某种原因我无法加载图标。下面是创建和显示对话框的整个功能。

static void help_clicked(GtkButton *button, GtkWindow *window)
{
    const gchar *authors[] = { "me", NULL };
    const gchar *license = "somestuff";
    GdkPixbuf *logo = gdk_pixbuf_new_from_file("logo.png", NULL);

    gtk_show_about_dialog(window,
                            "authors", authors, "license", license, "license-type", GTK_LICENSE_CUSTOM,
                            "logo", logo, "logo-icon-name", "Logo Icon",
                            "program-name", "Chapter 6, Exercise 1",
                            "version", "1.0",
                            "comments", "This is just an exercise from Chapter 6 of the book I'm reading.",
                            "website", "http://www.google.com", "website-label", "Application Homepage",
                            "copyright", "(C) 2014 Patrick Meyer",
                            "wrap-license", TRUE, NULL);
}

这会产生一个about对话框,其中包含成功设置的每个属性,除了图标。

奇怪的是,当gdk_pixbuf_new_from_file()main()提供gtk_window_set_icon()时,logo.png完全相同。这是一个单文件程序,执行目录中存在{{1}}。有什么遗漏?

3 个答案:

答案 0 :(得分:4)

如API参考清楚所述,GtkAboutDialog:logo-icon-name属性会覆盖GtkAboutDialog:logo属性:

https://developer.gnome.org/gtk3/stable/GtkAboutDialog.html#GtkAboutDialog--logo-icon-name

另外,你传递的logo-icon-name属性的值并不意味着什么;根据{{​​3}},logo-icon-name属性需要命名图标

只需删除logo-icon-name属性,您就会看到正确的图标。

作为示例中的旁注:您应该在GdkPixbuf返回后创建的gtk_show_about_dialog()对象上释放引用,否则您将泄漏它。理想情况下,因为每次单击帮助按钮时都不想从磁盘加载图像文件,所以应该使用以下内容:

static GdkPixbuf *logo_icon = NULL;

if (logo_icon == NULL)
  logo_icon = gdk_pixbuf_new_from_file ("logo.png", NULL);

gtk_show_about_dialog (...);

将在应用期间保持pixbuf。

另一个选择是使用GResource并将图像数据注入应用程序的二进制文件。

答案 1 :(得分:0)

问题在于logo-icon-name属性。正如inside the documentation所述,这会覆盖logo属性。如果遗漏logo-icon-name属性,徽标将正确显示。

答案 2 :(得分:0)

问题是你也在设置logo-icon-name,它应该是图标的符号名称,而不是人类描述。

因此正确设置内部图像,然后再次在内部更换。这也解释了为什么之后调用gtk_window_set_icon()可以正常工作。