c++ - 使用 vcpkg 安装 GTK3 的主题和图标问题

标签 c++ visual-studio gtk3 vcpkg

我在 Windows 10 上使用 Visual Studio 2019 并尝试在 C++ 中使用 GTK 并使用 vcpkg 安装它。

我使用 vcpkg 安装了 GTK根据guide from GTK .我正在使用 Visual Studio 2019,它能够编译和运行示例程序 here ,但是关于主题和图标存在问题。根据安装指南,在 部分下构建和分发您的应用程序 必须做一些事情才能使主题和图标正常工作。

我首先下载了指南建议的 Windows 主题,并将其放在 share 中。目录,然后我创建了一个 settings.ini etc 中的文件目录。它说把它放在“安装目录”中,我认为这是 Visual Studio 为程序放置 exe 的地方。我已经在构建和发布、源文件、顶级项目目录中尝试过它——都没有成功(我确实确保它是针对 x64 的)。

以防万一我也尝试将这些放置在安装 vcpkg 以及 vcpkg 安装 gtk 的位置。没运气。当程序运行时,我收到警告

(gtkExample0.exe:16772): Gtk-WARNING **: Could not find the icon 'window-minimize-symbolic-ltr'. 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

所以它似乎永远找不到 ssettings.ini文件告诉它使用 Windows 10 主题。有没有人让这个工作顺利(无论是从 VS2019 调试运行还是在部署中)?

总结文件:
share\themes\Windows10\gtk-3.0\gtk-3.20\ (从建议的 GitHub 存储库下载)
etc\settings.ini包含:
[Settings]
gtk-theme-name=Windows10
gtk-font-name=Segoe UI 9

我把这些放在
<VS2019Project>\x64\Release ,
<VS2019Project>\x64\Debug ,
C:<path_to_vcpkg>\vcpkg\packages\gtk_x64-windows ,
C:<path_to_vcpkg>\vcpkg\installed\x64-windows
从 VS2019 在 Release 或 Debug 下运行时,所有这些都没有变化。

最佳答案

vcpkg 不分发被视为外部资源的主题和图标,GTK 分发指南中关于这些资源在 Windows 10 上的布局位置的说明并不十分清楚。该问题也已在此处报告 vcpkg issue#4417 .

下面提出的解决方案是安装<VS2019Project>\x64\Release 中的所有资源.exe 应用程序所在的 VS 项目的目录 [这是问题的本地解决方案。全局方法应该考虑设置一些用户定义的自由桌面环境变量,这里不讨论]。图标可以从辅助的 MSYS2 发行版和主题中挑选,如 GTK Guide 中所示。 .应该为 Debug 分支复制该解决方案。

  • 假设你有 MSYS2,安装 mingw-w64-x86_64-adwaita-icon-theme带有 pacman 的包装如果您的 MSYS2 安装中尚未完成包管理器 pacman -Syu mingw-w64-x86_64-adwaita-icon-theme .
  • 复制 C:\msys64\mingw64\share\icons<VS2019Project>\x64\Release\share\icons你应该得到两个hicolorAdwaita图标作为目标目录的子目录。
  • 复制源码中下载的主题资源gtk-3.20目录直接进入<VS2019Project>\x64\Release\share\themes\Windows10\gtk-3.0\ .不要将这些资源定位到 gtk-3.20子文件夹:了解为什么要查阅这篇文章 Theme Location [假设这里没有设置全局桌面环境变量]。
  • 创建 <VS2019Project>\x64\Release\etc\gtk-3.0目录,把你的settings.ini进去。
  • 重新编译,您应该获得应用程序窗口的 Windows 10 外观。

  • Gtk Hello

    关于c++ - 使用 vcpkg 安装 GTK3 的主题和图标问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314408/

    相关文章:

    python - 从 GtkDialog 上的 Gtk.TreeView 激活 default_button (python/Gtk3)

    c++ - 两个线程之间是否有内存泄漏(缓冲,清空)

    c++ - 为什么这个 C++ 函数定义不需要花括号?

    c++ - 具有重载构造函数的 new[]

    c++ - 为什么 visual studio 会创建 .LIB 和 .DLL?

    gtk - 如何在 GtkEntry 中捕获 Enter 按键

    c++ - 如何在 Visual Studio 2012 C++ 项目中引用(动态库)DLL?

    c# - 构造类型、有界类型和无界类型的含义?

    c++ - 在 Visual Studio 2005 输出窗口中捕获 cout?

    c - 如何在单独的线程中更新 GTK+ GUI 的一部分,该线程不断从另一个进程读取数据?