我正在 Qt Creator 和 C++ 中创建一个应用程序,该应用程序通过索引和.desktop
中的文件列出系统上的所有应用程序。在几乎每个图标路径中,我都无法获得实际路径,而是获得本地路径,例如在 Characters 应用程序实例中,图标路径只是。/usr/share/applications
~/.local/share/applications
org.gnome.Characters
我听说图标通常位于 中/usr/share/pixmaps
,但我搜索了该图标,却找不到它。我搜索了整个系统,发现了多个实例,其中大多数位于 中/usr/share/icons/Yaru
(又称图标主题包)。
我可以将主题包编入索引作为搜索图标的地方,但是由于两个原因,这是不可靠的:
- 如果我抓取一个目录及其子目录来查找图标包中第一个匹配的图标,如果支持多种不同的分辨率,我可能会得到较低分辨率的图像。
- 用户可能已经卸载该主题。
就为了处理一个图标,这真是太麻烦了。有没有更好的方法?由于我没有图标的完整路径,我认为我几乎只能为图标索引大量位置,这是不必要的处理。
有没有好的方法可以做到这一点?我是否应该检查其他图标位置?也许 Qt 函数可以根据本地路径定位图标 :)?
答案1
这实际上与 Ubuntu 无关,因为它是一个 Qt 编程问题,但仍然......
在这种情况下,使用QIcon::fromTheme()。它使用桌面的主题路径,这也是用户在桌面菜单中看到的内容。
有一个重载版本,您可以在桌面主题无法提供图标的情况下提供后备图标。
对于我自己的图标查询DirStat,我使用内置图标Qt资源系统所以我不必依靠运气来判断是否有可用的图标;同时也要确保它们都有一致的外观和感觉,以防某些图标符合主题,而某些图标不符合。
但就你的情况而言,你想显示其他应用程序,因此主题图标是加载它们的第一个位置。请注意,您可能安装了多个图标主题,它们在某种程度上都重叠,因此让桌面决定使用哪个主题是正确的做法;否则,您很可能会从错误的图标主题中选择一个图标。