Это ответ на мой собственный вопрос, но я подожду, чтобы увидеть, есть ли лучшие решения.(возможно, есть функция Qt, которую я пропустил).
Я сделал следующий хак, используя класс QSettings (@thequark: +1 для вдохновения):
---------------------------------------------
QString orgName = "fooOrg";
QString appName = "fooApp";
QSettings qsettings(QSettings::IniFormat, QSettings::SystemScope, orgName, appName);
QString iniFilepath = qsettings.fileName();
QString commAppPath = iniFilepath.left(iniFilepath.length() -
QString("/fooOrg/fooApp.ini").length());
---------------------------------------------
Как вы можете видетьЯ на самом деле не использую объект QSettings, но просто получаю его путь к файлу, чтобы увидеть, где Qt будет его хранить.
Важно использовать:
- QSettings:: IniFormat : потому что нас интересует файл, а не, например, позиция в реестре Windows
- QSettings :: SystemScope : потому что мы хотим, чтобы машина зависела от пользователя, а не от пользователяpath
Приведенный выше код дает следующие результаты для (1) переменных iniFilepath (2) commAppPath и различных O / S:
Mac Snow Leopard 10.6.7
- / Библиотека / Настройки / Qt / fooOrg / fooApp.ini
- / Библиотека / Настройки / Qt
Windows XP-SP3
- C: / Документы и настройки / Все пользователи / Данные приложения / fooOrg / fooApp.ini
- C: / Documents And Settings / Все пользователи / Данные приложений
Windows 7 (64) и Windows Vista SP2
- C: /ProgramData/fooOrg/fooApp.ini
- C: / ProgramData
Хотя это хак, я думаю, что это хорошее решение, включающее только внутренние вызовы Qt и не использующее какие-либо специальные функции O / S.
Если у вас есть идея получше ... пожалуйста, дайте мне знать.
РЕДАКТИРОВАТЬ - PS: В Mac OS-X каталог "/ Library / Preferences" недоступен для записи для других пользователей.Пользователь -admin.Я наконец-то использовал каталог "/Users/Shared".