Я начинаю с 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, он приемлем как строковый объект.
Следующий код преобразует поле изображения объекта JSON в QString и QString в QImage —
QString base64img = jsonObj["photo"].toString();
QByteArray by = QByteArray::fromBase64(base64img.toLatin1());
QImage img = QImage::fromData(by,"JPEG");