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

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

提前致谢!

【问题讨论】:

标签: qt qsettings


【解决方案1】:

根据the docsQSettings::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类型是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2012-10-07
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多