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

Posted

技术标签:

【中文标题】在 Linux 上的 Qt 中获取应用程序图标 URL【英文标题】:Get app icon URL in Qt on Linux 【发布时间】:2014-12-23 19:10:29 【问题描述】:

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

【问题讨论】:

您正在讨论哪些应用程序?你自己的应用程序?所有安装在用户计算机上的应用程序?您输入的数据是什么(例如应用名称列表)? @SimonWarta 不是我自己的,其他应用程序(音乐应用程序)。我所拥有的只是桌面条目的名称(这真的很不可思议,不是吗?) 【参考方案1】:

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

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

.desktop 文件位于/usr/share/applications 应用图标为 SVG 或 PNG 格式 应用图标路径是绝对路径 应用名称为小写且不包含空格

输入:应用名称“git-cola”

    阅读/usr/share/applications/git-cola.desktop 使用QRegularExpression 获取Icon 值 你得到一个绝对的iconPath,例如/usr/share/git-cola/icons/git.svg 有一个 invokable C++ function 将 QUrl 公开给 QML 在 QML 中,将 Imagesource 属性设置为 getIconUrl("Target App")

其中 4. 看起来像

QUrl MyClass::getIconUrl(QString appName)

    // get iconPath from appName
    return QUrl::​fromLocalFile(iconPath);

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

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

【讨论】:

等等,我从哪里得到 iconPath? @user2563892 从以下步骤 1.-3。在你的 C++ 代码中实现 图标属性不一定有绝对网址,它可能只是主题中的图标名称,即已安装的图标名称 @user2563892 正如我所说,从最简单的情况开始。如果您没有找到使用绝对 URL 的示例应用程序,请手动编辑 .desktop 文件以使其成为绝对 URL。当它正常运行时,您可以添加对图标名称的支持。将问题分解成小块时,您的生活会更轻松。 嗯,问题是,我的目标是音乐播放器。它们中的大多数都已预先安装或在官方存储库中可用,因此它们将图标安装在正确的位置。此外,我注意到我系统上的每个音乐播放器都使用图标名称,因此从这种情况开始会更有效【参考方案2】:

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

【讨论】:

以上是关于在 Linux 上的 Qt 中获取应用程序图标 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QPushButton 的系统主题图标——Linux 上的 Qt Designer

OSX 上的 QT:托盘图标 - 图标 Dock 问题

如何在 Symbian 上的 QT 中设置应用程序图标?

如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以分发?

linux ubuntu qt中的桌面图标[重复]

关于在linux平台下修改由QT Creator生成的程序的图标问题