Russian Qt Forum

Qt => Общие вопросы => Тема начата: sergs от Май 03, 2016, 15:57



Название: Узнать путь к общесистемным настройкам
Отправлено: sergs от Май 03, 2016, 15:57
Существует ли в Qt кроссплатформенный способ получить расположение общесистемного каталога настроек/данных? Что-то вроде C:\Users\AllUsers\AppData в Windows, /usr/local/share в Linux и подобное в Mac.

Смотрел QDesktopServices, но он возвращает только пользовательские каталоги. В Qt5 есть класс QStandardPaths, но QStandardPaths::standardLocations(QStandardPaths::AppDataLocation) возвращает массив путей, а не один путь. Полагаться на порядок элементов в массиве и выдергивать нужный вручную не хочу, т.к. порядок может поменяться. Пробовал также использовать QStandardPaths::locate() и QStandardPaths::writableLocation() но оба метода возвращают пользовательский каталог. Неужели нет такой возможности?


Название: Re: Узнать путь к общесистемным настройкам
Отправлено: Alex Custov от Май 03, 2016, 16:17
Массив правильно возвращается, потому что в винде, например, настройки могут храниться в AppData/Local и в Roaming. Не говоря уж про реестр. Рекомендуемый, но не строго заданный путь - Roaming. QStandardPaths::standardLocation() (без s на конце) возвратит именно его, если тебе хочется один.


Название: Re: Узнать путь к общесистемным настройкам
Отправлено: Vamireh от Май 03, 2016, 19:46
Позволю себе пояснить:
В roaming рекомендуется хранить переносимые настройки, т.е. те, которые можно безбоязненно перенести (скопировать) на другую машину, например.
В local же - те, которые привязаны к конкретной машине/профилю, т.е. их перенос (копирование) может вызвать проблемы на другой машине.


Название: Re: Узнать путь к общесистемным настройкам
Отправлено: sergs от Май 11, 2016, 11:51
QStandardPaths::standardLocation() (без s на конце) возвратит именно его, если тебе хочется один.

Возможно, смотрю куда-то не туда, но здесь (http://doc.qt.io/qt-5/qstandardpaths.html) QStandardPaths::standardLocation() (без s на конце) отсутствует. Также, если правильно понял, методы locate() и writableLocation() возвращают разный результат в зависимости от пользователя, т.е. запуск под обычным юзером дает путь к пользовательскому каталогу, запуск под админом — к общесистемному.


Название: Re: Узнать путь к общесистемным настройкам
Отправлено: Alex Custov от Май 11, 2016, 12:41
возможно я перепутал с QStandardPaths::writableLocation()