首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查QVariant是否可转换为其他QVariant类型

检查QVariant是否可转换为其他QVariant类型
EN

Stack Overflow用户
提问于 2016-10-14 13:32:40
回答 1查看 824关注 0票数 0

我使用QJsonObject接收JSON中的数据。对于JSON中的键,我还有一个QObject-based对象保存属性(使用Q_PROPERTY(...) )。既然Qt现在拥有比JSON更多的数据类型,那么如何检查它们是否是可转换的。

对象中使用的数据类型通常是以下之一,但不限于

代码语言:javascript
复制
uint
double
QString
QDateTime
bool

其思想是为setProperty(...)中的每个键/值在QOject派生对象上自动调用QJsonObject。由于JSON中的输入格式错误,这可能会失败,因此我必须根据QMetaPropertyQJsonObject/QVariantMap数据检查有效性。

因为这应该作为基类运行泛型,所以手动检查每个数据类型都会失败。我知道有QVariant::isConvertible<T>()

代码语言:javascript
复制
#include <QJsonObject>
#include <QVariant>
#include <QMetaObject>
#include <QMetaProperty>
class Test {
  Q_GADGET
  Q_PROPERTY(QString test)

  QString m_test;
  QJsonObject jo;

  void call();
}

void Test::call()
{
    jo.insert("test",QJsonValue(5));

    // This will fail, since int is not convertible to QString implicitly
    staticMetaObject->property(staticMetaObject->propertyOffset()).writeOnGadget(this,jo["test"].toVariant());
}

由于我之前正在解析JSON,以检查每个属性是否在JSON对象中都有相应的键,所以我非常喜欢在不更改原始对象的情况下在那里捕获它们。类似于:

代码语言:javascript
复制
jo["test"].toVariant().canConvert<staticMetaObject->property(staticMetaObject->propertyOffset()).type()>()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 13:36:38

不使用模板化的bool QVariant::canConvert<T>(),而是可以使用bool QVariant::canConvert(int targetTypeId)

代码语言:javascript
复制
QMetaProperty po = staticMetaObject->property(staticMetaObject->propertyOffset());
jo["test"].toVariant().canConvert(po.type());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40044478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档