如何将 QVariant 转换为 QJsonValue?

Posted

技术标签:

【中文标题】如何将 QVariant 转换为 QJsonValue?【英文标题】:How to convert QVariant to 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")

【问题讨论】:

【参考方案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() 将正常工作。

以上是关于如何将 QVariant 转换为 QJsonValue?的主要内容,如果未能解决你的问题,请参考以下文章

QVariant 中的自定义类型转换为空字符串

qt中qvariant怎么转换成int

QVariant.toXXX 函数的函数指针

为 QVariant 指定非自定义类型转换器

qstring变量怎样转换为qvariant

QObject 将 QSystemDeviceInfo::Profile 连接到 QVariant