C++ 如何将QVariant转换为QJsonValue?

C++ 如何将QVariant转换为QJsonValue?,c++,qt,qjson,C++,Qt,Qjson,如何将QVariant转换为QJsonValue? 我知道QVariant提供了toJsonValue函数,但它没有按预期执行 例如: qDebug()<<QVariant(1.0).toJsonValue(); qDebug()<<QVariant("test").toJsonValue(); 预期产出: QJsonValue(double, 1) QJsonValue(string, "test") 您可以执行以下操作: QVariant dblVariant(1

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

例如:

qDebug()<<QVariant(1.0).toJsonValue();
qDebug()<<QVariant("test").toJsonValue();
预期产出:

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

您可以执行以下操作:

QVariant dblVariant(1.0);
QVariant strVariant("test");

QJsonValue dblJs(dblVariant.toDouble());
QJsonValue strJs(strVariant.toString());

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

您也可以使用此静态函数:

QJsonValue::fromVariant( myVariant )

查看更多信息。

我认为Qt应该“更智能”,能够检测数据类型。在这种情况下,智能是没有任何意义的。如果您有value
1.0
,除非您明确指定变量的类型,否则无法确定它是double还是QJsonValue。如果您需要让QVariant知道QVariant存储QJsonValue,那么您必须使用
QVariant::QVariant(const QJsonValue&val)
从QJsonValue构造QVariant。在这种情况下,
toJsonValue()
将正常工作。与
QVariant::toJsonValue
QJsonValue::fromVariant( myVariant )