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

C++ 在Linux上的Qt中获取应用程序图标URL,c++,linux,qt,icons,qml,C++,Linux,Qt,Icons,Qml,我正在尝试获取一个应用程序的图标(不管是哪一个)。我注意到Qt没有类似于GDesktopAppInfo的东西,因此我尝试从/usr/share/applications/appname.desktop通过QSettings获取它。这已经是个问题了,因为桌面文件可能不在那里。无论如何,继续提取图标键。现在我不知道如何找到url(请注意,我需要url,当然我可以制作一个QIcon,但我需要将它导出到QML,这意味着另一个QQuickImageProvider类,无论如何,我不想这样做)。这是可能的,

我正在尝试获取一个应用程序的图标(不管是哪一个)。我注意到Qt没有类似于
GDesktopAppInfo
的东西,因此我尝试从
/usr/share/applications/appname.desktop
通过
QSettings
获取它。这已经是个问题了,因为桌面文件可能不在那里。无论如何,继续提取
图标
键。现在我不知道如何找到url(请注意,我需要url,当然我可以制作一个
QIcon
,但我需要将它导出到QML,这意味着另一个
QQuickImageProvider
类,无论如何,我不想这样做)。这是可能的,还是前面提到的
QQuickImageProvider
是我唯一的解决方案?

这里有一个小指南,可以帮助您找到自己的方法。记住一件事:从基本情况开始,让代码运行,然后将其扩展到更困难的情况

现在,让我们假设以下情况:

  • .桌面文件位于
    /usr/share/applications
  • 应用程序图标为SVG或PNG格式
  • 应用程序图标路径是绝对路径
  • 应用程序名称为小写,不包含空格
输入:应用程序名称“git cola”

  • 阅读
    /usr/share/applications/git-cola.desktop
  • 使用a获取
    图标
  • 您将获得一个绝对的
    iconPath
    ,例如
    /usr/share/git-cola/icons/git.svg
  • 具有向QML公开
    QUrl
  • 在QML中,将
    图像的
    源属性设置为
    getIconUrl(“目标应用”)
  • 其中4。看起来像

    QUrl MyClass::getIconUrl(QString appName)
    {
        // get iconPath from appName
        return QUrl::​fromLocalFile(iconPath);
    }
    
    如果正在运行,您可以添加对的支持

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

    您可以使用QIcon::fromTheme(QString图标名)查找图标。它在大多数情况下都能工作,但不如gtk可靠

    您在研究什么应用程序?你自己的申请?用户计算机上安装的所有应用程序?您输入的数据是什么(例如应用程序名称列表)?@SimonWarta不是我自己的,其他应用程序(音乐应用程序)。我所拥有的只是桌面条目的名称(这是真的,难以置信,不是吗?)等等,我从哪里获得iconPath?@user2563892从下面的步骤1到3。在C++ CODEN图标中实现的属性不一定有绝对URL,它可能只是主题中的图标名称,即installed@user2563892正如我所说,从最简单的案例开始。如果找不到使用绝对URL的示例应用程序,请手动编辑.desktop文件,使其成为绝对URL。当它正常运行时,您可以添加对图标名称的支持。当你把你的问题分解成小块时,你的生活会变得更轻松。问题是,我的目标是音乐播放器。它们中的大多数都是预装的或在官方存储库中提供的,因此它们将图标安装在正确的位置。此外,我注意到我的系统中的每个音乐播放器都使用图标名,所以从这个例子开始会更有效