在 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 中,将 Image
的 source
属性设置为 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