Формат настроек QSettings INI Все еще использует реестр в Windows
Вопрос
Я пытаюсь установить путь для хранения некоторых пользовательских настроек для моего приложения, используя QSettings :: SetPath и defaulformat, но оба, кажется, игнорируются, когда я пытаюсь использовать файл настроек.
>>> QSettings.setDefaultFormat(QSettings.IniFormat)
>>> QSettings.setPath(QSettings.IniFormat, QSettings.UserScope, "C:\\")
>>> settings3 = QSettings("Balh", "MyApp")
>>> settings3.fileName()
PyQt4.QtCore.QString(u'\\HKEY_CURRENT_USER\\Software\\Balh\\MyApp')
.
Я хотел бы оставаться с использованием settings = QSettings()
, если я смогу без необходимости поставлять QSettings::IniFormat
к нему, так как он является приложением по перекрестным платформам и должна использовать нативный формат, если пользовательский путь не установлен.
Решение
Документация QSettings введена в заблуждение предполагает, что код
QSettings settings("Moose Soft", "Facturo-Pro");
.
эквивалентно
QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;
.
Но это не правда.Попробуйте это
from PySide import QtCore
QtCore.QSettings.setDefaultFormat(QtCore.QSettings.IniFormat)
settings = QtCore.QSettings("Moose Soft", "Facturo-Pro")
print settings.format()
QtCore.QCoreApplication.setOrganizationName("MooseSoft")
QtCore.QCoreApplication.setApplicationName("Facturo-Pro")
settings = QtCore.QSettings()
print settings.format()
.
, и вы увидите, что только второй конструктор использует формат по умолчанию.И если вы посмотрите на документацию конструктора QSettings, вы увидите, что это подтверждено:
Пример:
.QSettings settings("Moose Tech", "Facturo-Pro");
Область применения установлено значение QSettings :: Userscrop, а формат установлен на Qsettings.nappyformat (то есть вызов setdefaultformat () перед вызовом этого конструктора не имеет эффекта).
Только некоторые из конструкторов QSettings почитают формат по умолчанию, и вы выбрали тот, который не делает.