QSetttings IniFormat最终在Registry中

时间:2018-04-18 04:01:30

标签: qt registry ini qsettings

我正在Ini文件中保存应用数据。方法如下:

QSettings IniFile(K_COMPNAME,K_INIFILENAME);
QSettings::setDefaultFormat(QSettings::IniFormat);
IniFile.setValue("Location",loc);
IniFile.setValue("BaudRate",baud);
IniFile.sync();

K_INIFILENAME是一个常数"设置"。

我希望与我的exe相同的文件夹中的Settings.ini。 但不是。而是将其保存在Registry中。因为我这样做 qDebug() << IniFile.fileName();它返回:

  

&#34; \ HKEY_CURRENT_USER \ SOFTWARE \ MyCompany的\设置&#34;

我的问题是为什么会这样,以及如何将其保存在Ini文件中。

2 个答案:

答案 0 :(得分:2)

QSettings构造函数的documentation声明:

  

在调用此构造函数之前使用setDefaultFormat()   更改此构造函数使用的默认格式。

因此,请在创建setDefaultFormat对象之前致电QSettings

QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings IniFile(K_COMPNAME,K_INIFILENAME);
IniFile.setValue("Location",loc);
IniFile.setValue("BaudRate",baud);
IniFile.sync();

答案 1 :(得分:2)

请记住使用构造函数:

QSettings IniFile(K_COMPNAME,K_INIFILENAME);
  

构造一个QSettings对象来访问   来自组织的名为 application 的应用程序   的组织

     

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

这意味着它是一个注册表有效的构造函数(在windows下).. INI格式的正确方法是:

QCoreApplication::setOrganizationName(K_COMPNAME);
QCoreApplication::setApplicationName(K_INIFILENAME);
QSettings::setDefaultFormat(QSettings::IniFormat);
QSettings IniFile;

以上代码将使用INI格式,设置存储在FOLDERID_RoamingAppData

例如:FOLDERID_RoamingAppData\<K_COMPNAME>\<K_INIFILENAME>

现在只有一个构造函数存储在本地INI(settings.ini)文件中,如下所示:

QSettings IniFile(K_INIFILENAME,QSettings::IniFormat);