在Gtk 3中显示图标

时间:2015-03-24 15:03:16

标签: c gtk3

我对C语言中的gtk编程比较陌生。我使用Mac OS 10.9和XQuartz,使用gtk3(通过macports安装3.14.9_0 + x11)。我试图让父窗口在标题栏中显示一个图标。我在http://zetcode.com/tutorials/gtktutorial/firstprograms/

中找到了以下示例
#include <gtk/gtk.h>

GdkPixbuf *create_pixbuf(const gchar * filename)
{
   GdkPixbuf *pixbuf;
   GError *error = NULL;
   pixbuf = gdk_pixbuf_new_from_file(filename, &error);
   if(!pixbuf) {
      fprintf(stderr, "%s\n", error->message);
      g_error_free(error);
   }

   return pixbuf;
}

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "icon");
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
  gtk_widget_show(window);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return 0;
}

程序编译时没有错误或警告,当我运行它时没有报告错误显示窗口,除了标题栏中没有通常的X11图标之外没有其他图标。我确保在我的工作目录中有web.png文件,并且我已经完成了关于可能出错的想法。对于正在转换为GdkPixbuf的PNG文件有什么特殊要求吗?如果是这样,我为什么不在stderr收到消息?非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

由于您正在使用的环境,您可能遇到文件名编码问题。 Pixbuf期待一个GLib编码的文件名。您可以找到有关它的更多信息here

尝试使用g_filename_from_utf8()函数并将生成的GLib编码字符串传递给gdk_pixbuf_new_from_file()