QSettings:是否可以禁用组?

时间:2014-08-14 22:20:12

标签: c++ qt ini qsettings

我正在使用QSettings编写一个.ini文件,该文件将充当我的应用程序配置文件。只有一个问题:

QSettings将组名[General]添加到文件的顶部。

我以这种方式设置文件:

QSettings settings(QApplication::applicationDirPath() + fileName, QSettings::IniFormat);

并像这样写信:

settings.setValue("some_setting", theNumber);

然而,我最终将这些数据提供给的程序无法处理[General]标签。虽然我可以选择从文件中手动删除[General],但我想知道是否有可能让QSettings停止这样做。

我怀疑这种行为是由于指定QSettings::IniFormat。但是,我没有看到任何其他选项会告诉它停止指定组。

知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:4)

.ini文件格式是基于Microsoft在Windows上实现的事实上的标准。它需要存在部分。

无论您将文件提供给哪个应用程序,都不会真正实现.ini文件格式,而是实现其他格式。

很可能你根本不应该使用QSettings,而是手动实现这些功能。这应该不是问题,因为您只需将数据“提供”给其他软件。你不需要回读它。您可以将设置存储在常规QSettings中,然后将其导出到文本文件中以供该应用程序阅读。

答案 1 :(得分:3)

是时候编写自己的QSettings文件格式了。

“文件格式”是一对带签名的两个方法:

bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map);
bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map);

一个应该从map填充device,第二个应该将map转储到device。你可以使用你想要的任何东西 - 没有[general]组的xml,纯文本文件等。

之后,您应该使用QSettings::registerFormat函数注册新的闪亮格式。

以下是文档:http://qt-project.org/doc/qt-5/qsettings.html#registerFormat

祝你好运。