Открыть с помощью... |
Здравствуйте, гость ( Вход | Регистрация )
Открыть с помощью... |
RazrFalcon |
23.11.2011, 19:56
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Есть изображение в программе. Нужно в его контекстное меню добавить: "Открыть с помощью..." и список должен браться из системы. Это вообще реализуемо стандартными средствами?
|
|
|
fadday |
24.11.2011, 10:35
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 23.11.2011 Пользователь №: 3024 Спасибо сказали: 0 раз(а) Репутация: 0 |
Скорей всего придется писать самому. А программы привязанные к конкретному типу файлов можно списком вытащить из реестра. В ветке HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts/"формат файла"/OpenWithList - лежит список программ через которые можно открыть. На основе него, на сколько я понимаю, и строится меню "открыть с помощью...".
|
|
|
Sokoloff |
24.11.2011, 11:20
Сообщение
#3
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
|
|
|
RazrFalcon |
24.11.2011, 16:21
Сообщение
#4
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Я думал про кьютешный метод...
Системные и так знаю... Sokoloff, а что за способ? xdg? |
|
|
Sokoloff |
24.11.2011, 17:59
Сообщение
#5
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Я думал про кьютешный метод... Системные и так знаю... Sokoloff, а что за способ? xdg? Qt-шного метода нет. Есть QDesktopServices::openUrl но, из-за ошибок в xdg-open и xdg-mime скриптах он работает правильно только в Gnome и KDE. Я разбирался как определить приоритет приложений для mime типа, если надо то могу описать. |
|
|
RazrFalcon |
24.11.2011, 19:17
Сообщение
#6
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Ну я кроме gnome и kde ничего больше не юзал. Так что думал что QDesktopServices справляется везде.
В принципе мне не особо критично. Но на будущее интересно. Слушаю твой вариант |
|
|
Sokoloff |
25.11.2011, 13:56
Сообщение
#7
|
Участник Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: 11 |
Ну я кроме gnome и kde ничего больше не юзал. Так что думал что QDesktopServices справляется везде. В принципе мне не особо критично. Но на будущее интересно. Слушаю твой вариант Я тоже раньше так думал. Но FreeDesktop не опускается до таких "мелочей" а QDesktopServices использует xdg утилиты. Gnome и KDE работают по разному, поэтому вместо спецификации XDG написали костыли в xdg-open и xdg-mime. Алгоритм у них такой: 1. Получаем mime-type для файла. 2. Определяем среду если установлена переменная окружения $KDE_FULL_SESSION, значит KDE если GNOME_DESKTOP_SESSION_ID, то Gnome еще определяются LXDE и XFCE, но ЕМНИП они работают аналогично гному. 3. Если Gnome, то используется его утилита и реестр. На эту ветку я забил. 4. Если KDE, то запускается утилита kfmclient. А ее логику можно эмулировать. Она использует поля MimeType и InitialPreference из desktop-файлов. Рекурсивно бежим по всем файлам в /usr/share/applications и ищем файлы у которых в MimeType есть искомый тип. Чем InitialPreference InitialPreference больше, тем приложение выше в списке. Самое верхнее - приложение по умолчанию. Дефолтное приложение может быть перекрыто в ~/.local/share/applications/defaults.list. Можешь выдрать куски из https://github.com/Razor-qt/razor-qt/blob/m...desktopfile.cpp метод XdgDesktopFileCache::getDefaultApp. Или используй мою библиотеку, она специально не зависит от razor, и может использоваться отдельно от него. Лицензия LGPL так что можно и в коммерческой программе использовать. P.S. Пути могут отличатся в соответствии с XDG Base Directory Specification http://standards.freedesktop.org/basedir-s...pec-latest.html. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 11:15 |