Формат QSettings setpath 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, поскольку это кросс-платформенное приложение и должно использовать собственный формат, если не задан пользовательский путь.


person Nathan W    schedule 21.05.2012    source источник


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

person strubbly    schedule 21.05.2012