我对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收到消息?非常感谢您提供的任何帮助。
答案 0 :(得分:0)
由于您正在使用的环境,您可能遇到文件名编码问题。 Pixbuf期待一个GLib编码的文件名。您可以找到有关它的更多信息here。
尝试使用g_filename_from_utf8()
函数并将生成的GLib编码字符串传递给gdk_pixbuf_new_from_file()
。