4

ネットワークアクセスマネージャーを使用して行われた 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));

     }


}

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

4

2 に答える 2

5

のデータはQNetworkReply、 への呼び出し直後には準備ができていませんQNetworkAccessManager::get()。呼び出しは非同期であり、データを取得する前に、QNetworkAccessManager のシグナルfinished()または QNetworkReplyのシグナルに接続する必要があります。readyRead()

于 2011-06-23T18:21:36.157 に答える
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));

     }


}
于 2013-06-21T19:21:13.337 に答える