前言: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格式的文件,我们可以直接读取数据保存成文件;