我知道如何将图像设置为GtkWindow的图标。
GtkWindow * window;
gtk_window_set_icon_from_file(window, "icon.png", NULL);
并将icon.png与exe。一起放置。
但是,如果我不想将该图像文件保存在我的文件夹中,该怎么办?我想以某种方式捆绑在exe文件中。
我知道这可以在Qt中用qrc完成。我也可以在GTK +中这样做吗?
答案 0 :(得分:4)
我现在知道该怎么做。
首先,我必须将该图像转换为普通代码。
说我想将icon.png
作为图标。
运行此命令将其转换为名为icon_1
的变量。如果你没有它,就抓住那个二进制文件。
gdk-pixbuf-csource --raw --name=icon_1 icon.png
它将在命令提示符下显示。但我想你想把它保存到文件中。所以
gdk-pixbuf-csource --raw --name=icon_1 icon.png>icon.c
将在Windows中完成这项工作。
现在可以使用变量icon_1
了。
下一步。致电gdk_pixbuf_new_from_inline()
以从GdkPixbuf *
创建新的icon_1
。
GdkPixbuf * icon_title = gdk_pixbuf_new_from_inline(-1, icon_1, false, NULL);
现在,您可以使用新创建的gtk_window_set_icon()
来调用icon_title
来设置窗口的图标。
gtk_window_set_icon(window, icon_title);
还要记住,如果将icon_1
保留在独立的C文件中,则必须包含glib.h
以便可以编译它,因为它使用类型guint8
,并在之前使用该变量使用它可以链接。
更多详情:
答案 1 :(得分:2)
示例.gresource.xml可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/com/example/myapp">
<file>icon.png</file>
</gresource>
</gresources>
然后将其编译为C:
glib-compile-resources.exe myapp.gresource.xml --generate-source --target=resources.c
并在您的应用程序源中包含resources.c
然后使用嵌入文件作为窗口图标:
gtk_window_set_icon_from_file (window, "resource:///com/example/myapp/icon.png", NULL);
另外考虑使用gtk_window_set_default_icon_from_file设置图标以将其应用于对话框
答案 2 :(得分:0)
我们对此有点新,并且需要完成基本相同的事情,但是采用了不同的方法。
值得注意的是,将png(s)转换为xpm(s),然后加载/复制&#34; raw xpm(s)&#34;将原始代码作为&#34;变量&#34;,然后在GTK等中使用gdk_pixbuf_new_from_xpm_data()...等等。
这样原始的xpm被编译为代码的一部分,然后它不需要在外部搜索文件等。
这意味着失去了ppm无法支持的某些功能,但它很容易,甚至我们的非IT类型&#34;可以管理它。
这也允许直接访问&#34;图像&#34;因为它可以编辑为&#34; text&#34;在代码中,很容易制作变体和其他图标等,并且可以很容易地实时更改图标/图像&#34;编程。
它也非常便携。例如,我们也在Windows上的Gtk-Fortran中使用它...工作得很漂亮。
答案 3 :(得分:0)
这个问题是相对古老的,但是尽管如此,我还是在搜寻类似问题时偶然发现了它。因此,以下内容可能会有所帮助,这取决于@DrOli的答案,后者描述了一种非常通用的方法。 首先使用ImageMagicks convert将PNG转换为XPM
convert about.png about.xpm
将新文件包含到您的代码中,并以gtkmm方式创建pixbuf
#include <gdkmm/pixbuf.h>
#include "about.xpm"
Glib::RefPtr< Gdk::Pixbuf > logo = Gdk::Pixbuf::create_from_xpm_data(about);
Voila ...