Я пытаюсь загрузить изображения в Blackberry Cascades, C ++, QT.
Я в основном использую код, который выглядит так:
void MyClass::download() {
QUrl url(imagePath);
QNetworkRequest request(url);
Q_ASSERT(connect(networkAccessManager_, SIGNAL(finished(QNetworkReply *)), this, SLOT(saveImage(QNetworkReply *))));
networkAccessManager_->get(request);
}
void MyClass::saveImage(QNetworkReply *) {
QByteArray imageData = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "an error occured downloading the image";
return;
}
qDebug() << imageData;
//...
Когда я делаю это, imageData просто содержит: «Ã¿Ã˜Ã¿Ã, вместо всего содержимого изображения, которое я скачал.
Может кто-нибудь объяснить мне это? И как я могу заставить это работать?
Он в форме QByteArray, поэтому он показывает так. Просто передайте его в конструктор объекта Image следующим образом:
Image image = Image(reply->readAll());
imageView->setImage(image);
Он должен работать. Если этого не произойдет, изображение будет слишком большим, чтобы поместиться в ImageView. Максимальные размеры изображения, которое может обрабатываться каскадом ImageView, равно 2048. Поэтому вам, возможно, придется использовать класс ImageData для репликации большого изображения в каскад ImageView.
Также попробуйте загрузить изображение с этого URL У меня с этим работает URL без использования класса ImageData
Возможно, вы захотите проверить, перенаправляет ли QNetworkReply вас к реальному изображению. Если это так, вы получите новый QUrl, который будет использоваться для получения нового запроса. Проверьте документацию для QNetworkRequest :: Атрибуты
void MyClass::saveImage(QNetworkReply *reply) {
QUrl redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
if( redirect.isValid() ) {
QNetworkRequest request(redirect);
networkAccessManager_->get(request);
}
else {
QByteArray imageData = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qDebug() << "an error occured downloading the image";
return;
}
qDebug() << imageData;
}
}
На самом деле я думаю, что изображение загружается. Я думал, что загружалось всего несколько байтов, но на самом деле это было больше, чем просто несколько байтов — вот почему закрывающая кавычка не появлялась при распечатке с помощью qDebug (все изображение помещается в одну строку).