从网络访问管理器获取的 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 显示图像的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 *** 以编程方式访问网络路径

从 Qt 中的 QDBusMessage 检索数据

已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。

已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。

用 PyQt5 网络访问管理器下载的文件去哪了?我该如何保存它?

如何在 Qt 资源中打包图片以便从静态 HTML 资源访问