QT通過URL下載圖片
標頭檔案:
#ifndef DOWNLOADER_H
#define DOWNLOADER_H
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QObject>
#include <QUrl>
class Downloader : public QObject {
Q_OBJECT
public:
explicit Downloader(QObject *parent = 0) : QObject(parent) { m_isReady = true; }
virtual ~Downloader() {}
void downloadFileFromURL(const QString &url, const QString &filePath);
private slots:
void onDownloadFileComplete(QNetworkReply *reply);
private:
QFile *m_file;
bool m_isReady;
};
#endif // DOWNLOADER_H
原始檔:
#include "download.h"
#include <QDebug>
#include <QEventLoop>
void Downloader::downloadFileFromURL(const QString &url, const QString &filePath)
{
if (!m_isReady)
return;
m_isReady = false;
qDebug() << filePath;
m_file = new QFile();
m_file->setFileName(filePath);
m_file->open(QIODevice::WriteOnly);
if (!m_file->isOpen()) {
m_isReady = true;
return;
}
QNetworkAccessManager *manager = new QNetworkAccessManager;
QNetworkRequest request;
request.setUrl(QUrl(url));
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(onDownloadFileComplete(QNetworkReply *)));
manager->get(request);
}
void Downloader::onDownloadFileComplete(QNetworkReply *reply)
{
if (!m_file->isWritable()) {
m_isReady = true;
return;
}
m_file->write(reply->readAll());
m_file->close();
m_isReady = true;
}
呼叫方法:
Downloader downloader;
downloader.downloadFileFromURL("https://img3.doubanio.com/view/photo/photo/public/p449668815.jpg","G:/Documents/picture/name.jpg");