Gtk3中如何使用GResource加载图标

How to use GResource to load an icon in Gtk3

这是我的 .gresource.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: %ld\n", size);
}

我的代码有什么问题以及如何从资源加载图标?

GResource 不是文件,而是与您的 application/library 捆绑在一起的二进制资源。您应该仅使用 g_resource_*() 方法或在资源中查找数据的特殊方法访问它,例如 gtk_image_new_from_resourcegtk_builder_new_from_resourcegdk_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()。然后将使用最佳尺寸。