如何在QT中从json加载base64图像数据

时间:2015-01-09 06:25:44

标签: c++ json qt gson

我从QT5开始并尝试从base64 json数据加载图像。我可以直接从base64字符串加载,但在尝试从json对象加载时不成功。

我得到的错误是 错误:从'QJsonValueRef'转换为非标量类型'QByteArray'请求

我尝试更改为Utf8 toAcsii()等,但正在产生类似的错误。任何帮助和建议将不胜感激。

QString strReply = (QString)reply->readAll(); // json data from a servlet (created using gson library)
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObj = jsonResponse.object();
QByteArray imgbase64 = jsonObj["photo"]; // image data
QImage img;
img.loadFromData(QByteArray::fromBase64(imgbase64));
ui->outputImage->setPixmap(QPixmap::fromImage(img));
ui->outputImage->setScaledContents( true );
ui->outputImage->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored );

2 个答案:

答案 0 :(得分:1)

  

错误:来自' QJsonValueRef'到非标量类型' QByteArray'请求*

由于您没有指定此内容,我预计您所看到的错误来自此行: -

QByteArray imgbase64 = jsonObj["photo"]; // image data

在QJsonObject上调用[]运算符会返回QJsonValue。 QByteArray中没有overloaded =运算符来从QJsonValue初始化它。

您需要做的是使用QJsonValue函数并执行以下操作: -

QByteArray imgbase64;
if(jsonObj["photo"].isString())
{
    imgbase64 = jsonObj["photo"].toString().toUtf8();
}

由于照片对象应该在Base64中,因此可以作为字符串对象使用。

答案 1 :(得分:0)

以下代码将JSON对象图像字段转换为QString,将QString转换为QImage -

QString base64img = jsonObj["photo"].toString();
QByteArray by = QByteArray::fromBase64(base64img.toLatin1());
QImage img = QImage::fromData(by,"JPEG");