QT отображает изображение, полученное от менеджера доступа к сети - PullRequest
4 голосов
/ 23 июня 2011

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

QNetworkAccessManager* nam;

void MainWindow::on_pushButton_clicked()
{
    nam = new QNetworkAccessManager(this);
    QUrl url("http://i.imgur.com/Uw7Fk.jpg");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
    if (reply->error() == QNetworkReply::NoError)
    {
        QImageReader imageReader(reply);
        imageReader.setAutoDetectImageFormat (false);
        QImage pic = imageReader.read();
        ui->label_2->setPixmap(QPixmap::fromImage(pic));

     }


}

Пожалуйста, скажите мне, где я иду не так.

Ответы [ 2 ]

5 голосов
/ 23 июня 2011

Данные в QNetworkReply не готовы сразу после вызова QNetworkAccessManager::get().Вызов асинхронный, и вам необходимо подключиться либо к сигналу finished() QNetworkAccessManager, либо к сигналу readyRead() QNetworkReply, прежде чем пытаться получить какие-либо данные.

0 голосов
/ 21 июня 2013

Чтобы получить изображение синхронно, вы можете использовать QEventLoop, как показано ниже:

QNetworkAccessManager* nam;

void MainWindow::on_pushButton_clicked()
{
    nam = new QNetworkAccessManager(this);
    QUrl url("http://i.imgur.com/Uw7Fk.jpg");
    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);
        QImage pic = imageReader.read();
        ui->label_2->setPixmap(QPixmap::fromImage(pic));

     }


}
...