QSettings SetPath INI Formato utilizzando ancora il registro su Windows
Domanda
Sto cercando di impostare il percorso per archiviare alcune impostazioni personalizzate per la mia app utilizzando QSettings :: SetPath e DefaulFormat ma entrambi sembrano ignorare quando provo a utilizzare il file delle impostazioni.
>>> 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')
.
Vorrei soggiornare usando settings = QSettings()
se posso senza dover fornire QSettings::IniFormat
ad esso poiché è un'app cross platform e dovrebbe utilizzare il formato nativo se il percorso personalizzato non è impostato.
Soluzione
La documentazione QSetings suggerisce in modo fuorviante che il codice
QSettings settings("Moose Soft", "Facturo-Pro");
.
è equivalente a
QCoreApplication::setOrganizationName("Moose Soft");
QCoreApplication::setApplicationName("Facturo-Pro");
QSettings settings;
.
Ma questo non è vero.Prova questo
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()
.
E vedrai che solo il secondo costruttore utilizza il formato predefinito.E se guardi la documentazione del costruttore QSetings vedrai questo confermato:
.Esempio:
.QSettings settings("Moose Tech", "Facturo-Pro");
Lo scopo è impostato su QSetings :: UsedScope e il formato è impostato su Qsettings.nativeFormat (I.e. Chiamando SetDefaultFormat () Prima di chiamare questo costruttore non ha effetto).
Solo alcuni dei costruttori QSetings onorano il formato predefinito e ne hai scelto uno che non è.