Загрузите образ из QNetworkAccessManager

Я видел другой поток, говорящий об этом, но мне не удается отобразить мое изображение.

В настоящее время я загружаю свое изображение следующим образом:

void MyClass::imgHandle() {
QNetworkAccessManager *nam = new QNetworkAccessManager(this);
  QUrl url(_code.c_str());
  QNetworkReply* reply = nam->get(QNetworkRequest(url));

  QEventLoop eventLoop;

  connect(reply,SIGNAL(finished()),&eventLoop,SLOT(quit()));
  eventLoop.exec();

  if (reply->error() == QNetworkReply::NoError)
    {
      QImageReader imageReader(reply);
      imageReader.setAutoDetectImageFormat (false);
      _img = imageReader.read();
    }

}

_code создан из кода, полученного в результате синтаксического анализа Json, и URL-адрес выглядит следующим образом: http://l.yimg.com/a/i/us/we/52/33.gif
_img — это QImage в моем классе.

И в моем другом классе я делаю это:

int OtherClass::displayWeather()
{
 MyClass mC = new MyClass;

  mC->exec() // Where I get the code from the Json


  QLabel *imgWeather = new QLabel(this);                                              

  imgWeather->setPixmap(QPixmap::fromImage(mC->getImg())); 
  // getImg() return a QImage. 
  //The QImage created in MyClass.

  imgWeather->setGeometry(1700, 0, 120, 120);
}

И в конце.. Ничего не отображается!


person Nicolas Charvoz    schedule 24.10.2015    source источник


Ответы (1)


Вы должны проверить результат QImageReader::read:

QImageReader imageReader(reply);
imageReader.setAutoDetectImageFormat(false);
QImage _img = imageReader.read();
if (_img.isNull())
{
    qDebug() << imageReader.errorString();
}

В вашем случае ошибка "Неподдерживаемый формат изображения". По умолчанию QImageReader пытается автоматически определить формат изображения, и вы только что отключили его, вызвав setAutoDetectImageFormat(false). Удалите его, и QImageReader сделает свою работу.

person hank    schedule 26.10.2015
comment
Спасибо большое, работает отлично! Я скопировал код, не проверив, что он делает. - person Nicolas Charvoz; 27.10.2015