QT - как скачать и сохранить изображение через http? - PullRequest
1 голос
/ 08 июня 2011

Я хочу скачать 1 изображение и сохранить его.Вот что у меня есть:

    QCoreApplication a(argc, argv);

    QNetworkAccessManager *manager = new QNetworkAccessManager();

    QNetworkReply *img = manager->get(QNetworkRequest(QUrl("http://placekitten.com/200/300")));

    QImage* img2 = new QImage();
    img2->save(img->readAll(), "omg2.png");

Но идентификатор не работает, пожалуйста, помогите!

РЕДАКТИРОВАТЬ: Это также не работает, я получаю "упс" в консоли:

 QNetworkAccessManager *manager = new QNetworkAccessManager();
   //connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));

    QNetworkReply *img = manager->get(QNetworkRequest(QUrl("http://placekitten.com/200/300")));

    QImage* img2 = new QImage();
    img2->loadFromData(img->readAll());

    if(img2->isNull())
        std::cout << "oops";

    img2->save("omg2.png");

РЕДАКТИРОВАТЬ: НЕТ, я получаю странную ошибку с vtable, после qmake ошибка все еще существует:

#include <QtCore/QCoreApplication>
#include <QNetworkAccessManager>
#include <QtNetwork>
#include <QImage>
#include <QPixmap>
#include <iostream>


class omg  : public QObject{

     Q_OBJECT

    public:
        void start(){


            QNetworkAccessManager *manager = new QNetworkAccessManager();
            connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

            manager->get(QNetworkRequest(QUrl("http://placekitten.com/200/300")));
        }


    public slots:
        void replyFinished(QNetworkReply* reply)
        {
           //Check for errors first
           QImage* img2 = new QImage();
           img2->loadFromData(reply->readAll());

           if(img2->isNull())
               std::cout << "oops";

           img2->save("omg2.png");
        }


};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    omg *o = new omg();
    o->start();

    return a.exec();
}

1 Ответ

5 голосов
/ 08 июня 2011

Вы пытаетесь прочитать данные из QNetworkReply даже до того, как будет выполнен запрос Http, не говоря уже о завершении.

NetworkAccessManager *manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://placekitten.com/200/300")));

...
/*Define  slot and read data from QNetworkreply*/
void finished(QNetworkReply* reply)
{
   //Check for errors first
   QImage* img2 = new QImage();
   img2->loadFromData(reply->readAll());

   if(img2->isNull())
       std::cout << "oops";

   img2->save("omg2.png");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...