首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMetaType::转换失败

QMetaType::转换失败
EN

Stack Overflow用户
提问于 2017-06-05 16:27:49
回答 1查看 568关注 0票数 0

我正在尝试使用QMetaType::convert将QJsonValue转换为另一个动态类型。首先,我测试了以下动态类型设置为QString的代码,转换失败。

代码语言:javascript
复制
QJsonValue value("test");
QString string;
if (!QMetaType::convert(&value, QMetaType::QJsonValue, &string, QMetaType::QString))
{
    qDebug() << "failed";
}

然后,我找到了这个静态方法来检查元系统是否注册了两个元类型之间的转换。

代码语言:javascript
复制
qDebug() << QMetaType::hasRegisteredConverterFunction(QMetaType::QJsonValue, QMetaType::QString);

不幸的是,结果是错误的。可能是QJsonValue太复杂了,不支持从QJsonValue到QString的转换。最后,我尝试了一下,结果仍然是假的:

代码语言:javascript
复制
qDebug() << QMetaType::hasRegisteredConverterFunction(QMetaType::Int, QMetaType::Int);

奇怪的是,Qt并没有实现基本元类型之间的转换函数。而且,用户不能使用QMetaType::registerConverter来注册两个基本元类型之间的转换函数。

我仍然不能相信Qt没有实现基本元类型之间的转换,有没有我遗漏的初始化或.pro设置?

EN

回答 1

Stack Overflow用户

发布于 2017-06-05 22:39:24

我猜您一方面有QMetaType系统和QVariant类来封装Qt数据类型,另一方面有QJsonValue来封装JSON中的值。

转换只能处理QVariant数据。您可以做的是从QJsonValue中提取QVariant,然后使用QMetaType系统将您知道的数据转换为QString。

代码语言:javascript
复制
// Your code
QJsonValue value("test");
QString string ;
if (!QMetaType::convert(&value, QMetaType::QJsonValue, &string, QMetaType::QString))
{
    qDebug() << "failed";
}

// Extract the QVariant data
QVariant variant = value.toVariant() ;

// Two way to test conversion between QVariant and a type
qDebug() << "canConvert template:" << variant.canConvert<QString>() << endl
         << "canConvert parameter:" << variant.canConvert( QMetaType::QString ) ;
if( variant.canConvert<QString>() )
{
   // Convert using QVariant methods
   qDebug() << "QVariant toString:" << variant.toString() ;

   // Convert Using QJsonValue methods
   qDebug() << "QJsonValue toString:" << value.toString() ; // It's just a string representation of the data, not the actual data
}

输出:

代码语言:javascript
复制
 failed
 canConvert template: true 
 canConvert parameter: true
 QVariant toString: "test"
 QJsonValue toString: "test"

PS: QJsonValue::Type : String与QVariant::Type : String (QMetaType::QString)不同,所以它们之间没有关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44364765

复制
相关文章

相似问题

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