我正在编写Qt应用程序,需要存储该程序的设置。我希望非高级用户可以轻松编辑它们,但对高级用户来说足够灵活(因此可以通过其他程序,脚本等方便地进行自动编辑)。 QSettings提供两种格式,原生格式(适用于Windows是注册表)和INI格式(适用于大多数其他平台)。 INI很好,但看到@QString(...)或其他Qt内容并不是真的可读,而且容易出错。
注册表也不是很好。它不是为了编辑或高级使用而设计的,因此不是很好;它确实解决了跨线程和多个QSettings对象的同步问题(所以我不会擦除所有内容,尽管我可以使用一个全局对象,受读写锁定器保护)。我正在研究XML,但它很啰嗦,它确实需要编写QSettings格式(不是真正的问题),但非常灵活。
我知道存在其他XML替代方案,但我并不熟悉它们;我当然不想写一个解析器,我自己的最终格式的异常,而不是基本的东西。
更新 - 注意:我根本不会绕过QSettings,我只会为它编写一个格式 - 看起来它只是两个函数指针(用于读取和写入函数)传递给静态函数然后我可以使用我的格式。
更新2:我也担心Linux服务器,它通常没有GUI ..我希望人们能够通过nano或类似的东西轻松地从服务器编辑配置,不使用管理器(是的,我将有一个守护程序服务器和一个远程GUI管理器)。
答案 0 :(得分:3)
您可以使用QSettings类来实现此目的。它是一个抽象类,允许您的应用程序存储其设置,以便在下次启动时检索它们。
保存设置:
QSettings settings("ValueName", "Value");
阅读设置:
QString v = settings.value("ValueName");
答案 1 :(得分:1)
我首先要通过.ini文件进行QSettings,看看你是否最终遇到了很多问题。如果没有问题,那么就没有必要去寻找XML解决方案。如果您最终想要XML解决方案,您可以(如上所述)为QSettings对象添加格式化程序。
答案 2 :(得分:1)
如果由于某种原因你最终绕过QSettings
并考虑将XML作为配置文件,我建议你去看看JSON或YAST,具体取决于你对可用库的喜好。
作为旁注,如果您不打算让用户手动编辑文件,只需选择最适合您的文件(QSettings
?)并继续您的生活,因为选择格式将无所谓(har har)。
答案 3 :(得分:0)
另一种审视冗长的方法是内容健壮性。如果出于任何原因(一个alpha粒子轰击磁盘,导致单个位翻转),你仍然可以进入那里进行必要的纠错...所以有好处,但也有相关成本......二进制文件,单个位错误意味着数据完全丢失