Как хранить файлы INI с помощью QSettings в OS X

Я использую QSettings для хранения некоторых настроек моего приложения в файле INI.

В Windows все работает нормально, и мой файл INI хранится в той же папке, что и мое приложение. Но в OS X я не могу найти файл INI, и настройки не загружаются, когда я снова открываю свое приложение.

Я использую следующий код для хранения значений в файле INI с помощью QSettings:

QSettings *settings = new QSettings("settings.ini", QSettings::IniFormat);

settings->beginGroup("AppSettings");
settings->setValue("Language", language);
settings->endGroup();

Кто-нибудь знает, что происходит?

Как я могу хранить файлы INI в моем Application.app на OS X?


person KelvinS    schedule 13.09.2016    source источник
comment
Какой QSettings::status() вызов возвращается? (После попытки что-то написать). Вы уверены, что QSettings::isWritable() вернет истину?   -  person Dmitry Sazonov    schedule 13.09.2016
comment
Я попробовал qDebug() << settings->status();, и он вернул 0.   -  person KelvinS    schedule 13.09.2016
comment
Когда я запускаю свое приложение из Qt, QSettings::isWritable() возвращает true. Но когда я создаю его с помощью macdeployqt MyApp.app и запускаю MyApp.app, QSettings::isWritable() возвращает false.   -  person KelvinS    schedule 13.09.2016
comment
Наконец, мой INI-файл появился внутри MyApp- ›Contents-› MacOS- ›settings.ini (возможно, потому, что я создал его, запустив приложение из Qt). Но я думаю, что файл INI не доступен для чтения / записи, потому что он находится внутри MyApp.app.   -  person KelvinS    schedule 13.09.2016


Ответы (1)


Я думаю, что OS X не дает разрешений на редактирование файлов внутри пакета приложений.

Я решил проблему, изменив расположение файла INI:

QString path = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
QSettings *settings = new QSettings(path+"/settings.ini", QSettings::IniFormat);

settings->beginGroup("AppSettings");
settings->setValue("Language", language);
settings->endGroup();

Теперь файл INI будет сохранен в папке QStandardPaths::ConfigLocation, в моем случае это /Users/.../Library/Preferences

Я решил проблему на основе этого тема.

person KelvinS    schedule 13.09.2016