我从QT5开始,尝试从base64 json数据加载图像。我可以直接从base64字符串加载,但是尝试从json对象加载时却失败。
我得到的错误是
错误:请求从“ QJsonValueRef”转换为非标量类型“ QByteArray”
我尝试将toUtf8更改为Acsii()等,但是正在产生类似错误。任何帮助和建议将不胜感激。
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 );
最佳答案
错误:请求从“ QJsonValueRef”转换为非标量类型“ QByteArray” *
由于您未指定此选项,因此我希望您看到的错误来自以下行:-
QByteArray imgbase64 = jsonObj["photo"]; // image data
在QJsonObject上调用[]运算符将返回QJsonValue。 QByteArray中没有重载=运算符,可以从QJsonValue对其进行初始化。
您需要做的是使用QJsonValue函数并执行以下操作:-
QByteArray imgbase64;
if(jsonObj["photo"].isString())
{
imgbase64 = jsonObj["photo"].toString().toUtf8();
}
由于照片对象应该位于Base64中,因此可以作为字符串对象使用。