Получить URL-адрес значка приложения в Qt в Linux

0

Я пытаюсь получить значок приложения (не важно, какой из них). Я заметил, что Qt не имеет ничего похожего на GDesktopAppInfo поэтому я попытался получить его через QSettings из /usr/share/applications/appname.desktop. Это уже проблема, потому что файл рабочего стола, возможно, не существует. В любом случае, идем дальше, чтобы извлечь Icon. Теперь я не знаю, как найти URL-адрес (обратите внимание, что мне нужен URL-адрес, я мог бы сделать QIcon, но мне нужно экспортировать его в QML, что будет означать другой класс QQuickImageProvider, во всяком случае, я не хочу идти таким путем), Возможно ли это, или это вышеупомянутое QQuickImageProvider мое единственное решение?

  • 0
    Какие приложения вы принимаете? Ваше собственное приложение? Все установленное приложение на компьютере пользователя? Что вы вводите данные (например, список названий приложений)?
  • 0
    @SimonWarta Не мои собственные, другие приложения (музыкальные приложения). Все, что у меня есть, это имя записи на рабочем столе (это все действительно, невероятно, нет?)
Теги:
qt
icons
qml

2 ответа

2
Лучший ответ

Вот небольшой справочник, который поможет вам найти свой путь. Помните об этом: начните с основного случая, получите код и продолжите его в более сложные случаи позже.

Пока давайте предположим следующее:

  • .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++ функцию, которая предоставляет QUrl для QML
  5. В QML задайте свойство source Image для getIconUrl("Target App")

где 4. выглядит что-то вроде

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

Если все работает, вы можете добавить поддержку для

  • Несколько локаций.desktop (может быть, несколько или несколько)
  • Добавить поддержку относительных путей
  • Добавить поддержку файлов XPM
  • 0
    Подождите, где я могу получить iconPath?
  • 0
    @ user2563892 Из следующих шагов 1.-3. реализовано в вашем коде C ++
Показать ещё 5 комментариев
0

Вы можете использовать QIcon :: fromTheme (QString iconName), чтобы найти значок. Он работает большую часть времени, но он не так надежен, как gtk

Ещё вопросы

Сообщество Overcoder
Наверх
Меню