Как загрузить данные изображения base64 из json в QT

Я начинаю с 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 );

0

Решение

ошибка: запрошено преобразование из ‘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, он приемлем как строковый объект.

1

Другие решения

Следующий код преобразует поле изображения объекта JSON в QString и QString в QImage —

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

По вопросам рекламы [email protected]