El formato ini de QSettings setpath todavía usa el registro en Windows
Pregunta
Estoy intentando establecer la ruta para almacenar algunas configuraciones personalizadas para mi aplicación usando QSettings::setPath y defaulFormat, pero ambos parecen ignorarse cuando intento usar el archivo de configuración.
>>> 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')
Me gustaría seguir usando settings = QSettings()
si puedo sin tener que suministrar QSettings::IniFormat
ya que es una aplicación multiplataforma y debe usar el formato nativo si no se establece la ruta personalizada.
Solución
La documentación de QSettings sugiere engañosamente que el código
QSettings settings("Moose Soft", "Facturo-Pro");
es equivalente a
QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;
Pero esto no es cierto.Prueba esto
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()
y verás que sólo el segundo constructor usa el formato predeterminado.Y si miras la documentación del constructor QSettings verás esto confirmado:
Ejemplo:
QSettings settings("Moose Tech", "Facturo-Pro");
El alcance se establece en QSETTINGS :: UssCope, y el formato se establece en Qsettings.nativeFormat (es decir,llamar a setDefaultformat () antes de llamar a este constructor no tiene ningún efecto).
Sólo algunos de los constructores de QSettings respetan el formato predeterminado y usted ha elegido uno que no lo hace.