【问题标题】:Saving 64-bit integer with QSettings使用 QSettings 保存 64 位整数
【发布时间】:2013-09-29 06:09:04
【问题描述】:

除了将数字转换为QByteArray之外,有没有什么巧妙的方法可以用QSettings保存quint64?问题是QVariant 不接受qint64 也不接受quint64

【问题讨论】:

    标签: qt 64-bit int64 qvariant qsettings


    【解决方案1】:

    QVariant 支持qlonglongqulonglong。正如文档所说,这些与qint64quint64 相同。所以你可以使用QVariant::QVariant(qlonglong)QVariant::toLongLong

    【讨论】:

      【解决方案2】:

      如果将qint64 存储为字符串会怎样。 QString 支持这样的转换:QString::number(qlonglong n, int base),其中qlonglongqint64 相同。 quint64 相同 - 使用 QString::number(qulonglong n, int base),其中 qulonglongquint64 相同。

      QSettings settings("config.ini", QSettings::IniFormat);
      [..]
      qint64 largeNumber = Q_INT64_C(932838457459459);
      settings.setValue("LargeNumber", QString::number(largeNumber));
      [..]
      

      【讨论】:

      • 还有一个 QVariant ctor 需要 qlonglong
      【解决方案3】:

      另一个解决方案是认识到 IEEE 754 双格式有一个 53 位小数(不要忘记隐含的第 53 位!)和一个符号位。这允许您在不损失精度的情况下存储无符号 53 位整数或有符号 54 位整数。如果满足以下条件,您可以存储:

      • 你的 qint64 的绝对值小于 2^55,或者
      • 您的 quint64 小于 2^54。

      【讨论】:

        猜你喜欢
        • 2019-03-25
        • 2021-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多