我从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 );
答案 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");