不同类型的 QSettings

Posted

技术标签:

【中文标题】不同类型的 QSettings【英文标题】:QSettings with different types 【发布时间】:2015-09-18 14:15:11 【问题描述】:

我正在尝试使用 QSettings(ini 文件,Linux)存储一些不同类型的参数。 当我使用 settings.value() 从中读取值时,我只会得到 QStrings。 有什么方法可以在此设置文件中存储 QVariant 的类型,还是应该使用其他存储来代替?

提前致谢!

【问题讨论】:

Qsettings does not differentiate between string and int values的可能重复 如果您事先不知道它们有哪些类型,您是如何使用设置的?例如,如果您存储窗口大小,您知道它应该是 QSize,并相应地进行转换。 【参考方案1】:

根据the docs,QSettings::value() 函数返回一个QVariant。然后应该将其转换为您想要的任何类型。

您可以使用QVariant::type() 找到您存储在QSettings 中的类型。

这就是 QSettings 在 Windows 上使用 NativeFormat 应该如何工作并且确实如此。

但是,当使用 ini 文件和大多数简单类型(包括字符串和整数)时,QSettings 在 ini 文件中使用相同的简单表示,因此会合并这些类型。它们都以 QVariant 中的 QString 类型返回。

更复杂的类型正确编码在 ini 文件中,因此这些类型被保留。

【讨论】:

我需要知道我应该将此 QVariant 转换成什么类型​​。是否可以从 QSettings 获取此信息? 您可以拨打typeQVariant QVariant::type() 为 int、bool 和 string 返回 QString。 @N1ghtLight 哦,是的,Eckler 是对的——ini 文件格式不能正确地保留简单类型。但适用于更复杂的类型。我在帖子中添加了更多细节。【参考方案2】:

如QSettings does not differentiate between string and int values中所述

QSettings 从 .ini 文件中读取的每个 QVariant 值都有字符串类型。

还提出了手动将类型信息附加到存储字符串的解决方案。因此,如果在阅读过程中没有找到特殊的后缀,则可以手动决定是否转换为 int 或 bool。

顺便说一下,对于更复杂的类型(如QSize),存储类型信息,所以QVariat类型是正确的。

【讨论】:

以上是关于不同类型的 QSettings的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 用于记录具有不同属性的不同类型的事件

为啥 ref 参数类型与常规类型不同?

javascript 中不同类型以及不同环境下变量的内存都是何时释放

不同色谱柱的不同 SCD 类型

为啥不同类型的 Python 对象按类型名称排序? [复制]

PHPStorm 类型提示不同类型的数组