2011-06-23 6 views
4

ネットワークアクセスマネージャを使用して取得要求から取得したイメージを表示しようとしています。私はそれをコンパイルして実行することさえできます。私はQlabelでイメージを表示することができません。ネットワークアクセスマネージャから取得したQT表示イメージ

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)); 

    } 


} 

どこが間違っているか教えてください。

答えて

5

QNetworkAccessManager::get()の呼び出しの直後にQNetworkReplyのデータが準備されていません。呼び出しは非同期で、QNetworkAccessManagerのfinished()信号またはQNetworkReplyのreadyRead()信号のいずれかに接続して、データを取得しようとする必要があります。

+0

をおかげで、私はそれをしようとしている、と私はいくつかの時間後に更新します。 – Vamsi

0

同期した画像を取得するには、以下のように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)); 

    } 


} 
関連する問題