从网络访问管理器获得的QT显示图像

问题描述

| 我正在尝试显示从使用networkaccess管理器发出的get请求获得的图像。我能够编译甚至运行它。但我无法在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));

     }


}
请告诉我我要去哪里了。     

解决方法

        调用
QNetworkAccessManager::get()
后,
QNetworkReply
中的数据尚未准备好。该调用是异步的,在尝试检索任何数据之前,您需要连接到QNetworkAccessManager的
finished()
信号或QNetworkReply的
readyRead()
信号。     ,        要同步获取图像,可以使用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));

     }


}