天天看點

QNetworkAccessManager 下載下傳Gif檔案

前言:Qt通過插件支援的圖檔格式有很多,但是有一些是不支援寫的,比如gif;

示例介紹用QNetworkAccessManager下載下傳Gif檔案;

頭檔案中定義:

QNetworkAccessManager *m_pNetworkAccessManager = NULL;
private slots:
	void slot_downloadFinishReply(QNetworkReply* reply);
           
#include <QNetworkAccessManager>
#include <QFile>
#include <QNetworkRequest>
QtDownLoadGif::QtDownLoadGif(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	m_pNetworkAccessManager = new QNetworkAccessManager(this);
	connect(m_pNetworkAccessManager, &QNetworkAccessManager::finished, this, &QtDownLoadGif::slot_downloadFinishReply);
	QNetworkRequest request;
	QSslConfiguration config = QSslConfiguration::defaultConfiguration();
	config.setPeerVerifyMode(QSslSocket::VerifyNone);
	config.setProtocol(QSsl::TlsV1SslV3);
	request.setSslConfiguration(config);
	request.setUrl(QUrl("https://xxx.gif"));
	request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/jason"));
	m_pNetworkAccessManager->get(request);
}

QtDownLoadGif::~QtDownLoadGif() = default;

void QtDownLoadGif::slot_downloadFinishReply(QNetworkReply* reply)
{
	QFile *m_pfile;
	m_pfile = new QFile(this);
	m_pfile->setFileName("./xxx.gif");
	int i = reply->error();
	if (reply->error() == QNetworkReply::NoError)
	{
		if (!m_pfile->open(QIODevice::ReadWrite | QIODevice::Truncate))	return;
		m_pfile->write(reply->readAll());
		m_pfile->waitForBytesWritten(5 * 1000); //等待檔案寫入結束
		m_pfile->close();
	}
}
           

雖然Qt不支援直接儲存Gif格式的檔案,我們可以直接讀取資料儲存成檔案;