QSettings setpath ini格式仍在Windows上使用注册表

时间:2012-05-21 01:34:55

标签: python qt pyqt qsettings

我正在尝试使用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,因为它是一个跨平台应用程序,如果未设置自定义路径,则应使用本机格式。

1 个答案:

答案 0 :(得分:8)

QSettings文档误导性地建议代码

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

相当于

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

但事实并非如此。试试这个

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

您将看到只有第二个构造函数使用默认格式。如果你看一下QSettings构造函数文档,你会看到这个确认:

  

示例:

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

范围设置为QSettings :: UserScope,格式设置为   QSettings.NativeFormat(即在调用此构造函数之前调用setDefaultFormat())   没有效果。)

只有部分QSettings构造函数遵循默认格式,而您选择的格式不是。