C++ 从网络访问管理器获取的QT显示图像
我试图显示从使用networkaccess管理器发出的get请求中获取的图像。我可以编译,甚至可以运行它。但我无法在Qlabel中显示图像C++ 从网络访问管理器获取的QT显示图像,c++,qt,qt4,qnetworkaccessmanager,qtnetwork,C++,Qt,Qt4,Qnetworkaccessmanager,Qtnetwork,我试图显示从使用networkaccess管理器发出的get请求中获取的图像。我可以编译,甚至可以运行它。但我无法在Qlabel中显示图像 QNetworkAccessManager* nam; void MainWindow::on_pushButton_clicked() { nam = new QNetworkAccessManager(this); QUrl url("http://i.imgur.com/Uw7Fk.jpg"); QNetworkReply*
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));
}
}