Как использовать GResource для загрузки иконки в Gtk3 - PullRequest
0 голосов
/ 07 апреля 2020

Это мой .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);
}

Что не так с моим кодом и как мне загрузить значок из ресурса?

1 Ответ

1 голос
/ 07 апреля 2020

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 ( ). Тогда будет использован лучший размер.

...