5

我正在编写一个 Qt 应用程序,并且需要存储程序的设置。我希望它们可以被非高级用户轻松编辑,但对高级用户来说足够灵活(因此允许通过其他程序、脚本等轻松进行自动编辑)。QSettings 确实提供了两种格式,本机格式,对于 Windows 是注册表,以及 INI 格式,对于大多数其他平台是本机格式。INI 很好,但是在其中看到 @QString(...) 或其他 Qt 内容并不是真正可读的,而且有点容易出错。

注册表也不是很好。它的设计初衷不是为了搞乱,因此不太适合编辑或高级使用;它确实解决了跨线程和多个 QSettings 对象的同步问题(因此我不会清除所有内容,尽管我可以只使用一个受读写锁保护的全局对象)。我正在查看 XML,但它非常冗长,并且确实需要编写 QSettings 格式(不是真正的问题),但非常灵活。

我知道 XML 的其他替代品存在,但我并不真正熟悉它们;我当然不想编写解析器,我自己的最终格式是例外,而不是基本的东西。

更新 - 注意:我根本不会绕过 QSettings,我只会为它编写一个格式 - 看起来它只是传递给静态函数的两个函数指针(用于读取和写入函数),然后我可以使用我的格式。

更新 2:我也担心 Linux 服务器,它们通常没有 GUI。我希望人们能够通过 nano 或类似的东西轻松地从服务器编辑配置,而无需使用管理器(是的,我会有一个守护程序服务器和一个远程 GUI 管理器)。

4

4 回答 4

3

您可以使用QSettings类来实现这一点。它是一个抽象类,允许您的应用程序存储其设置,以便在下次启动时检索它们。

保存设置:

QSettings settings("ValueName",  "Value");

读取设置:

QString v = settings.value("ValueName");
于 2009-12-02T09:33:43.050 回答
1

我将从通过 .ini 文件进行 QSettings 开始,看看您是否会遇到很多问题。如果没有问题,那么就没有必要寻求 XML 解决方案。如果您最终需要 XML 解决方案,您可以(如前所述)为 QSettings 对象添加格式化程序。

于 2009-12-02T00:05:33.083 回答
1

如果由于某种原因您最终绕过QSettings并考虑将 XML 用于您的配置文件,我建议您查看 JSON 或 YAST,具体取决于您喜欢可用库的方式。

作为旁注,如果您不打算让用户手动编辑文件,只需选择对您来说最简单的(QSettings?)并继续您的生活,因为格式的选择一点都不重要(har har )。

于 2009-12-02T09:54:06.603 回答
0

另一种看待冗长程度的方法是内容稳健性。如果出于任何原因(阿尔法粒子轰击磁盘,导致单个位翻转),您仍然可以进入那里并进行必要的纠错......所以有好处,但也有与之相关的成本......二进制文件,一个位错误意味着数据完全丢失

于 2009-12-01T20:39:27.787 回答