【问题标题】:QSettings: Is it possible to disable groups?QSettings:是否可以禁用组?
【发布时间】:2014-10-08 17:16:30
【问题描述】:

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

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

我是这样设置文件的:

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

然后这样写:

settings.setValue("some_setting", theNumber);

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

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

知道我该怎么做吗?

【问题讨论】:

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

标签: c++ qt ini qsettings


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2021-04-17
      • 2020-11-20
      • 2011-01-22
      • 2014-11-20
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多