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

标签 c++ linux qt icons qml

我正在尝试获取应用程序的图标(无论是哪一个)。我注意到 Qt 没有类似 GDesktopAppInfo 的东西,因此我尝试通过 /usr/share/applications/appname.desktop 中的 QSettings 获取它.这已经是一个问题,因为桌面文件可能不存在。无论如何,进一步提取 Icon 键。现在我不知道如何找到 url(注意我需要 url,确定我可以制作一个 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. 有一个invokable C++ functionQUrl 暴露给 QML
  5. 在 QML 中,将 Imagesource 属性设置为 getIconUrl("Target App")

哪里 4. 看起来像

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

如果一切正常,您可以添加对

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

关于c++ - 在 Linux 上的 Qt 中获取应用程序图标 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27626547/

相关文章:

c - 获取 X11 窗口标题高度

c - 为什么在 linux 中使用线程打印相同的 pid?

javascript - CKEditor 字符计数 (charcount) 不起作用

c++ - 对象创建必须使用哪种设计模式?

c++ - 0x751fc52f异常,代码: 0x71a: , flags=0x1(无法继续执行)(第一次机会)

c++ - 读取不确定值是未定义的行为吗?

c++ - GMP有理数如何序列化?

c++ - 用引号定义 C++ 预处理器宏

c++ - 使用 std::function 重载分辨率

c++ - 如何在 Qt 中获取文件系统操作的上下文菜单?