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

QT display image obtained from network access manager

本文关键字:QT 显示 显示图 图像 网络 访问 管理器      更新时间:2023-10-16

我正在尝试显示从使用networkaccess manager发出的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));
     }

}