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

Posted

技术标签:

【中文标题】从网络访问管理器获取的 QT 显示图像【英文标题】:QT display image obtained from network access manager 【发布时间】:2011-06-23 18:14:25 【问题描述】:

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

     



请告诉我哪里出错了。

【问题讨论】:

【参考方案1】:

QNetworkReply 中的数据在调用QNetworkAccessManager::get() 后并未立即准备好。调用是异步的,在尝试检索任何数据之前,您需要连接到 QNetworkAccessManager 的 finished() 信号或 QNetworkReply 的 readyRead() 信号。

【讨论】:

【参考方案2】:

要同步获取图片,可以使用如下的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));

     



【讨论】:

以上是关于从网络访问管理器获取的 QT 显示图像的主要内容,如果未能解决你的问题,请参考以下文章