我正在尝试在控制台应用程序中使用 Qt 下载并保存一些图像。这是我到目前为止得到的,(所有代码都在编译,但运行后,它似乎没有进入replyFinished()功能......)
void Test::start()
{
std::cout << "start1";
QNetworkAccessManager *manager = new QNetworkAccessManager();
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://www.exylum.mydevil.net/firefox.jpg")));
}
void Test::replyFinished(QNetworkReply* reply)
{
std::cout << "st";
QImage* img2 = new QImage();
img2->loadFromData(reply->readAll());
if(img2->isNull())
std::cout << "oops";
if(img2->save("omg2.jpg", "JPG"))
std::cout << "saved";
else
std::cout << "dont...";
}
Run Code Online (Sandbox Code Playgroud)
头文件
#ifndef IMAGEDOWNLOAD_H
#define IMAGEDOWNLOAD_H
#include <QWidget>
#include <QHttp>
#include <QFile>
#include <QUrl>
class ImageDownload : public QWidget
{
Q_OBJECT
public:
explicit ImageDownload(QWidget *parent = 0);
private:
int httpGetId;
QHttp http;
QFile myfile;
private slots:
void httpRequestFinished(int, bool);
void progress(int,int);
};
#endif // IMAGEDOWNLOAD_H
Run Code Online (Sandbox Code Playgroud)
源文件
#include "imagedownload.h"
ImageDownload::ImageDownload(QWidget *parent) :
QWidget(parent)
{
QUrl url("url of image.");
myfile.setFileName("C:/Qt/imagefilename");
myfile.open(QIODevice::WriteOnly);
connect(&http,SIGNAL(requestFinished(int,bool)),this,SLOT(httpRequestFinished(int,bool)));
connect(&http,SIGNAL(dataReadProgress(int,int)),this,SLOT(progress(int,int)));
http.setHost(url.host(),QHttp::ConnectionModeHttp,url.port());
httpGetId = http.get(url.path(),&myfile);
}
void ImageDownload::httpRequestFinished(int id, bool error)
{
if(id == httpGetId)
{
myfile.close();
}
if(error)
{
qDebug(http.errorString().toLatin1());
}
}
void ImageDownload::progress(int a, int b)
{
qDebug(QString::number(a).toLatin1()+" : "+QString::number(b).toLatin1());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11824 次 |
| 最近记录: |