2

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

4

1 に答える 1

9

The QSettings documentation misleadingly suggests that the code

QSettings settings("Moose Soft", "Facturo-Pro");

is equivalent to

QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;

but this is not true. Try this

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()

and you will see that only the second constructor uses the default format. And if you look at the QSettings constructor documentation you will see this confirmed:

Example:

QSettings settings("Moose Tech", "Facturo-Pro");

The scope is set to QSettings::UserScope, and the format is set to QSettings.NativeFormat (i.e. calling setDefaultFormat() before calling this constructor has no effect).

Only some of the QSettings constructors honour the default format and you have chosen one that doesn't.

于 2012-05-21T11:43:24.367 に答える