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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top