不同类型的 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 获取此信息? 您可以拨打type
QVariant
。
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的主要内容,如果未能解决你的问题,请参考以下文章
javascript 中不同类型以及不同环境下变量的内存都是何时释放