Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Q设置:是否可以禁用组?_C++_Qt_Ini_Qsettings - Fatal编程技术网

C++ Q设置:是否可以禁用组?

C++ Q设置:是否可以禁用组?,c++,qt,ini,qsettings,C++,Qt,Ini,Qsettings,我正在使用QSettings编写一个.ini文件,该文件将用作我的应用程序配置文件。只有一个问题: QSettings将组名[General]添加到文件顶部 我通过以下方式设置文件: QSettings settings(QApplication::applicationDirPath() + fileName, QSettings::IniFormat); 然后像这样写信给它: settings.setValue("some_setting", theNumber); 但是,我最终输入这些

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

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

我通过以下方式设置文件:

QSettings settings(QApplication::applicationDirPath() + fileName, QSettings::IniFormat);
然后像这样写信给它:

settings.setValue("some_setting", theNumber);
但是,我最终输入这些数据的程序无法处理[General]标记。虽然我可以选择手动从文件中删除[General],但我想知道是否可以让QSettings停止这样做

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


你知道我该怎么做吗

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

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


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

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

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

bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map);
bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map);
一个应该从
设备
填充
映射
,第二个应该将
映射
转储到
设备
。您可以在那里使用任何您想要的东西——xml、无需
[general]
组的纯文本文件等

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

以下是文件:


祝你好运

您可能应该重新考虑使用
QApplication::applicationDirPath()
作为存储位置。这是程序的可执行文件所在的目录,因此通常不是用户可写的位置,例如管理员在系统范围内安装的软件这是很久以前的项目,但在我的使用案例中,它总是安装在用户可写的位置(这是一个爱好者的最终用户应用程序)-但是很好的捕获