在 Linux 上的 Qt 中获取应用程序图标 URL

Get app icon URL in Qt on Linux

本文关键字:应用程序 图标 URL 获取 Linux 上的 Qt      更新时间:2023-10-16

我正在尝试获取应用程序的图标(无论哪个图标)。我注意到Qt没有类似GDesktopAppInfo的东西,因此我尝试通过/usr/share/applications/appname.desktop QSettings。这已经是一个问题,因为桌面文件可能不存在。无论如何,进一步提取Icon密钥。现在我不知道如何找到网址(请注意,我需要网址,当然我可以做一个QIcon,但我需要将其导出到 QML,这意味着另一个QQuickImageProvider类,无论如何,我不想那样做)。是否可能,或者上述QQuickImageProvider是我唯一的解决方案?

这里有一个小指南,可能会帮助你找到自己的方式。请记住一件事:从基本情况开始,运行代码,稍后将其扩展到更困难的情况。

现在,让我们假设以下内容:

  • .desktop 文件处于/usr/share/applications
  • 应用程序图标采用 SVG 或 PNG 格式
  • 应用图标路径是绝对的
  • 应用名称为小写,不包含空格

输入:应用名称"git-cola"

  1. 阅读/usr/share/applications/git-cola.desktop
  2. 使用 QRegularExpression 获取Icon
  3. 你会得到一个绝对的iconPath,例如 /usr/share/git-cola/icons/git.svg
  4. 具有可调用的 C++ 函数,该函数向 QML 公开QUrl
  5. 在 QML 中,将Imagesource属性设置为getIconUrl("Target App")

其中 4. 看起来像

QUrl MyClass::getIconUrl(QString appName)
{
    // get iconPath from appName
    return QUrl::​fromLocalFile(iconPath);
}

如果事情正在运行,您可以添加对

  • 多个 .desktop 位置(可能有几个左右)
  • 添加对相对路径的支持
  • 添加对 XPM 文件的支持

您可以使用 QIcon::fromTheme(QString iconName) 来查找图标。它大部分时间都有效,但不如 gtk 可靠