这是我的.gressource.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/readaratus/decoder">
<file alias="app_icon">icon192.png</file>
</gresource>
</gresources>
我写了这个代码来设置图标:
gtk_window_set_icon_from_file(GTK_WINDOW(ui.main_window),
"resource:///org/readaratus/decoder/app_icon",
NULL);
失败,并发出以下警告:
Gtk-WARNING **: Error loading icon from file 'resource:///org/readaratus/decoder/app_icon':
Failed to open file 'resource:///org/readaratus/decoder/app_icon': No such file or directory
但如果我查询资源捆绑包,它会报告一个3631字节的对象:
gsize size;
if(g_resources_get_info("/org/readaratus/decoder/app_icon",
G_RESOURCE_LOOKUP_FLAGS_NONE,
&size, NULL, NULL))
{
g_print("app_icon size: %ldn", size);
}
我的代码出了什么问题,如何从资源中加载图标?
GResource
不是一个文件,而是与应用程序/库绑定的二进制资源。您应该只使用g_resource_*()
方法或在资源中查找数据的特殊方法来访问它,如gtk_image_new_from_resource
、gtk_builder_new_from_resource
、gdk_pixbuf_new_from_resource
。
在您的情况下,您应该加载Gdkpixbuf
并将其单独设置为图标。
GdkPixbuf *pixbuf;
pixbuf = gdk_pixbuf_new_from_resource ("/org/readaratus/decoder/app_icon", NULL);
gtk_window_set_icon (window, pixbuf);
旁注:如果您有多个尺寸的图标手绘,请使用gtk_window_set_icon_list((。然后将使用最佳尺寸。