QSettings setpath ini format все еще использует реестр в 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
к нему как кроссплатформенному приложению и должен использовать собственный формат, если не указан пользовательский путь.
1 ответ
Документация 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::UserScope, а формат установлен в QSettings.NativeFormat (т.е. вызов setDefaultFormat() до вызова этого конструктора не имеет никакого эффекта).
Только некоторые конструкторы QSettings соблюдают формат по умолчанию, а вы выбрали тот, который этого не делает.