QSettings比使用dict有什么优势?

2024-05-23 18:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

QSettings在C++中看起来是一个很好的东西,它本质上是一个灵活的哈希表,其中的键是字符串,值是q变体,所以它可以是几种类型。然而,在Python中我们已经有了这个,它是一个字典。所以我问,在PyQt中使用QSettings比使用dict有什么优势?在

编辑: 更简洁地说,我使用QSettings对象为特定键指定特定设置的每一行,我都可以用字典做同样的事情。是的,QSettings有一些细节,比如转换成ini文件,但是我可以用相同的代码行数用json模块存储dict-to-file。就QSettings提供的功能而言,我试图理解为什么人们会使用它而不是仅仅使用dict和json模块。我已经仔细阅读了文档以了解QSettings提供的功能,但没有什么能让我觉得是一个非常好的特性,所以我基本上是在问,你认为QSettings最有益的特性是什么?为什么它比使用dict+json模块更优越


Tags: 模块对象字符串功能json编辑类型字典
2条回答

Documentation

Users normally expect an application to remember its settings (window sizes and positions, options, etc.) across sessions. This information is often stored in the system registry on Windows, and in property list files on macOS and iOS. On Unix systems, in the absence of a standard, many applications (including the KDE applications) use INI text files.

QSettings is an abstraction around these technologies, enabling you to save and restore application settings in a portable manner. It also supports custom storage formats .

QSettings ‘s API is based on QVariant , allowing you to save most value-based types, such as QString , QRect , and QImage , with the minimum of effort.

因此它实际上不仅仅是一个基本的dict对象,它处理与在重新启动之间保存应用程序状态相关的常见任务。它实现了许多方便的methods来实现这一点。在

< St>^{}不是容器,所以在Python中它不等同于字典。< /罢工>类似于Qt/C++中的字典的东西可能是^{}(显然它的局限性)。在

^{}是一个允许您永久保存信息的类,也就是说,当应用程序重新打开时,甚至可以访问这些信息,而字典在关闭应用程序时会丢失保存的信息。在

例如,让我们使用以下示例并运行它几次:

字典:

d = {"foo": "bar"}
print(d)
# modify dictionary
d["foo"] = "rab"

输出:

^{pr2}$

q设置

from PyQt5 import QtCore

settings = QtCore.QSettings("Foo", "Bar")
value = settings.value("value", 0, type=int)
print(value)
settings.setValue("value", value + 1)
settings.sync()

输出:

0
1
2
3
4

在第一种情况下,它不考虑程序先前的执行,但在第二种情况下,它考虑到了。在

总之,QSettings允许您保存应用程序再次运行时可以使用的信息,例如保存会话、权限等

此外,QSettings是一个抽象层,在多个平台上实现了前面的功能。在


根据您所指出的版本,我想您应该将QSettings与dict+json模块进行比较。在

好吧,选择取决于用户,但以下内容可以帮助您选择:

  • QSettings支持存储许多本机Qt类,比如QSize、QPoint等,但是对于Json,它不支持它们。在

因此,在所有QSettings的末尾都有一个选项,在Qt世界中是唯一的,但在Python世界中不是唯一的,因为还有其他类似于^{}(YAML)、^{}(INI)、^{}(XML)等

相关问题 更多 >