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 соблюдают формат по умолчанию, а вы выбрали тот, который этого не делает.

Другие вопросы по тегам