【发布时间】:2019-12-13 00:45:50
【问题描述】:
QSettings 在 C++ 中似乎是一个很棒的东西,它本质上是一个灵活的哈希表,其中键是字符串,值是 QVariant,所以它可以是相当多的类型。然而,在 Python 中我们已经有了这个,它是一个字典。所以我问,在 PyQt 中使用 QSettings 比仅使用 dict 有什么优势?
编辑: 更简洁地说,我使用 QSettings 对象将特定设置分配给特定键的每一行,我都可以用字典做同样的事情。是的,QSettings 有一些细节,比如转换为 ini 文件,但我可以使用 json 模块将 dict 存储到文件中,并使用相同的代码行数。例如,就 QSettings 提供的能力而言,我试图理解为什么人们会使用它而不是仅仅使用 dict 和 json 模块。我已经仔细阅读了文档以了解 QSettings 提供的东西,没有任何东西对我来说是一个非常棒的功能,所以我基本上是在问,你认为 QSettings 最有益的功能是什么,为什么它优于使用一个 dict + json 模块
【问题讨论】:
-
正如文档所述,它们不是一回事——字典在内存 (RAM) 中,而 QSettings 存储在硬盘驱动器上,简而言之,这是您的主要和最重要的区别,并且基于这个列表还在继续。
-
如果我有一个代表设置的字典,我可以轻松地使用 json 模块将设置存储到文件中。我意识到 QSettings 有一些用于将设置存储到 ini 文件的选项。在比较方面,我真的不认为 QSettings 在这里有优势,我认为它们在功能奇偶性方面是平等的
-
@KevinS 那么您可能会问,JSON 格式(不是 json 模块)和 QSettings 有什么区别?
-
@eyllanesc 不一定。从实现的角度来看,我知道我需要将所有小部件的状态存储在内存中,然后存储到文件中,然后在另一个时间我需要将状态从文件加载到内存中,最后加载到小部件中。在我看来,QSettings 并不优于 python dict + json 模块。如果我特别知道我会有嵌套结构,那么 QSetting 模块只支持开箱即用的 ini 文件,其他任何东西(例如 yaml 或 json),我将不得不提供挂钩来实现它。这似乎并不优于仅使用 dict + json 模块
-
@KevinS 正如我在回答中指出的那样,一个或另一个类的选择具体取决于您的要求,没有一个是更好的,因为它们只是替代另一个选项的缺陷的替代品。