【问题标题】:How to convert QVariant to QJsonValue?如何将 QVariant 转换为 QJsonValue?
【发布时间】:2017-12-08 07:51:47
【问题描述】:

如何将QVariant 转换为QJsonValue? 我知道QVariant 提供了toJsonValue 函数,但它没有按预期执行。

例如:

qDebug()<<QVariant(1.0).toJsonValue();
qDebug()<<QVariant("test").toJsonValue();

两者都返回:

QJsonValue(null)
QJsonValue(null)

期望输出:

QJsonValue(double, 1)
QJsonValue(string, "test")

【问题讨论】:

    标签: c++ qt qjson


    【解决方案1】:

    你也可以使用这个静态函数:

    QJsonValue::fromVariant( myVariant )
    

    查看this link了解更多信息。

    【讨论】:

    • 这会进行所需的转换,不像QVariant::toJsonValue
    【解决方案2】:

    您可以执行以下操作:

    QVariant dblVariant(1.0);
    QVariant strVariant("test");
    
    QJsonValue dblJs(dblVariant.toDouble());
    QJsonValue strJs(strVariant.toString());
    

    您的方法不起作用,因为变体对象应该具有用户类型QJsonValue,但它没有。因此它返回默认构造的QJsonValue 对象。

    【讨论】:

    • 我认为 Qt 应该更“聪明”,能够检测数据类型。
    • 在这种情况下,聪明一点都没有。如果您有值1.0,除非您明确指定变体的类型,否则无法说出它是双精度值还是 QJsonValue。如果您需要让 Qt 知道 QVariant 存储 QJsonValue,您必须使用 QVariant::QVariant(const QJsonValue &amp;val) 从 QJsonValue 中构造 QVariant。在这种情况下,toJsonValue() 将正常工作。
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多