我从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中,因此可以作为字符串对象使用。

09-17 10:26