代码之家  ›  专栏  ›  技术社区  ›  CMircea

要选择什么设置存储格式?

  •  5
  • CMircea  · 技术社区  · 15 年前

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

    注册处也不太好。它不是被设计成混乱的,因此不适合编辑或高级使用;它确实解决了线程和多个qsettings对象之间的同步问题(因此,我不会删除所有内容,尽管我只能使用一个全局对象,由读写锁定器保护)。我正在研究XML,但它相当冗长,需要编写一个qsettings格式(实际上不是问题),但非常灵活。

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

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

    更新2: 我还担心Linux服务器,它通常没有GUI。我希望人们能够在不使用管理器的情况下,通过nano或类似的方式从服务器轻松地编辑配置(是的,我将拥有一个守护进程服务器和一个远程GUI管理器)。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Tiberiu Ana    15 年前

    如果出于任何原因你最终绕道 QSettings 考虑到配置文件的XML,我建议您查看json或yast,这取决于您对可用libs的喜欢程度。

    作为旁注,如果您不想让用户手动编辑文件,只需选择最简单的文件即可。( QSET ?)继续你的生活,因为格式的选择一点也不重要(har har-har)。

        2
  •  3
  •   Patrice Bernassola    15 年前

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

    保存设置:

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

    读取设置:

    QString v = settings.value("ValueName");
    
        3
  •  1
  •   Caleb Huitt - cjhuitt    15 年前

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

        4
  •  0
  •   vtd-xml-author    15 年前

    另一种看待冗长性的方法是内容健壮性。如果出于任何原因(α粒子轰击磁盘,导致单个位翻转),您仍然可以进入磁盘并进行必要的错误更正…所以有好处,也有成本…对于二进制文件,单个位错误意味着数据完全丢失。