如何通过http下载和保存图像

how to download and save image via http?

本文关键字:保存 图像 下载和 http 何通过      更新时间:2023-10-16

我想下载一个图像并保存它

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

但是id不起作用,请帮忙!

编辑:这也不起作用,我在控制台中得到"oops":

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

编辑:在qmake错误仍然存在之后,我用vtable得到了奇怪的错误:

#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();
}

您甚至在Http请求发出之前就试图从QNetworkReply读取数据,更不用说完成了。

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