【问题标题】:Gtk+ icon missing when running in MS Windows在 MS Windows 中运行时缺少 Gtk+ 图标
【发布时间】:2014-12-31 12:18:55
【问题描述】:

我有一个在 Ubuntu 上开发的 C/GTK+ 应用程序,我想交叉编译它以便它在 MS Windows 上运行。

我按照this guide设置编译器,程序编译成功,在MS Windows上运行。

但是,搜索条目上的图标不见了。

这是我在 Ubuntu 上得到的结果:

这是我在 MS Windows(或 Wine)中运行程序时得到的结果:

另外,终端显示如下:

(main.exe:8): Gtk-WARNING **: Could not find the icon 'edit-find-symbolic'. The 'hicolor' theme
was not found either, perhaps you need to install it.
You can get a copy from:
    http://icon-theme.freedesktop.org/releases

问题:是否可以在 Windows 中显示图标,而无需在 Windows 机器上安装任何东西?我的应用程序旨在能够在不安装任何东西的情况下从 USB 闪存驱动器运行。

我用来创建应用程序的 Glade 文件的相关部分,以防有用:

          <object class="GtkSearchEntry" id="searchentry1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="primary_icon_name">edit-find-symbolic</property>
            <property name="primary_icon_activatable">False</property>
            <property name="primary_icon_sensitive">False</property>
          </object>

到目前为止我尝试过的事情:将 edit-find-symbolic.svg 复制到包含 main.exe 的目录(即与 dll 一起);在那里复制整个目录/usr/share/icons/gnome。这些都不起作用。


更新:

在包含main.exe 的目录中,我添加了一个子目录share,并在其中添加了另一个子目录icons。我将edit-find-symbolic.svg 放在了这个子目录中。搜索图标看起来还是一样(不起作用),但是这次的终端输出不同:

(main.exe:8): GLib-GIO-CRITICAL **: g_loadable_icon_load: assertion `G_IS_LOADABLE_ICON (icon)' failed

如果edit-find-symbolic.svg不在此文件夹中,但有一个名为hicolor的文件夹,则图标仍然不起作用,这一次终端中根本没有任何输出。

【问题讨论】:

  • 你试过类似this的东西吗? GTK 对 Windows 视觉效果的支持非常糟糕。 Qt 更好,但仍然缺乏像在 Linux 上那样访问系统图标的体面方法。
  • @rubenvb 试过但没用。而且我不认为我想放弃我已经构建的所有东西并使用 Qt 重新开始,因为这只是一个学校项目。如果我不能解决这个问题,我会改用普通的文本输入...
  • 是的,您只是缺少默认图标主题。您需要与您的应用程序一起发布。 Adwaita 图标主题是第一个。另一种叫做hicolor icon主题。

标签: c windows gtk cross-platform gtk3


【解决方案1】:

这是一个迟到的回复,但我遇到了这个问题,我已经通过以下步骤解决了这个问题:

需要将默认主题 (adwaita) 的 SVG 图标复制到与 bin 目录相关的共享目录 bin../share/icons/Adwaita/scalable/* 以及 bin../share/icons/Adwaita/icon -theme.cache 和 bin../share/icons/Adwaita/index.theme

经过多次测试,似乎还需要以下文件:

lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.dll
lib/gdk-pixbuf-2.0/2.10.0/loaders/loaders.cache

这个loaders.cache文件的第一行也需要编辑成“../lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.dll”

文件树如下所示:

bin/gtkapplication.exe
bin/*.dll
share/loader.cache
share/glib-2.0/gschemas.compiled
share/icons/Adwaita/scalable/*
share/icons/Adwaita/icon-theme.cache
share/icons/Adwaita/index.theme
lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-svg.dll
lib/gdk-pixbuf-2.0/2.10.0/loaders/loaders.cache

包含适用于 Windows 的 GTK+3 运行时文件的最新存储库(截至 2019 年 5 月 23 日): https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer

【讨论】:

  • 谢谢!同样对于其他有类似问题的人......这个答案仍然是相关的,尽管包含的 URL 现在已经死了。对于最新的解决方案,我建议使用这个存储库:github.com/tschoonj/…
  • 你还需要彩色图标主题!
【解决方案2】:

作为一种解决方法,我将图标从 svg 转换为 png,然后将它们放在 share/icons 中。图标现在显示了,但有一个小问题:当搜索条目为空时,右侧会出现一个额外的放大镜图标。

当条目中有文字时,额外的放大镜将被“清除”图标取代,所以我认为这不是什么大问题......(虽然看起来很奇怪......)

由于这只是一种解决方法而不是完美的解决方案,因此我不会将此标记为已接受的答案。我认为问题可能与 svg 文件的显示方式有关,但我拥有来自 here 的所有 DLL,所以我不太明白问题出在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多