Qsettings SetPath Ini Format toujours à l'aide du registre sur Windows
Question
J'essaie de définir le chemin pour stocker des paramètres personnalisés pour mon application à l'aide de Qsettings :: SetPath et Defaulformat, mais les deux semblent être ignorés lorsque j'essaie d'utiliser le fichier de paramètres.
>>> 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')
J'aimerais rester à l'aide de settings = QSettings()
si je peux sans avoir à fournir QSettings::IniFormat
, car il s'agit d'une application de plate-forme croix et doit utiliser le format natif si le chemin personnalisé n'est pas défini.
La solution
La documentation QSettings suggère trompeusement que le code
QSettings settings("Moose Soft", "Facturo-Pro");
équivalent à
QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;
Mais ce n'est pas vrai.Essayez ceci
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()
Et vous verrez que seul le deuxième constructeur utilise le format par défaut.Et si vous regardez la documentation du constructeur QSettings, vous verrez cette confirmation:
Exemple:
QSettings settings("Moose Tech", "Facturo-Pro");
La portée est définie sur Qsettings :: userscope et le format est défini sur Qsettings.nativeFormat (c'est-à-dire appelant SetDefaultformat () avant d'appeler ce constructeur n'a aucun effet).
Seuls certains des constructeurs QSettings respectent le format par défaut et vous avez choisi celui qui ne le fait pas.