xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡(jiǎn)介

如何用Qt 的方法進(jìn)行HTTP 請(qǐng)求下載文件,能夠支持?jǐn)帱c(diǎn)續(xù)傳(斷點(diǎn)續(xù)傳即能夠手動(dòng)停止下載,下次可以從已經(jīng)下載的部分開(kāi)始繼續(xù)下載未完成的部分,而沒(méi)有必要從頭開(kāi)始上傳下載),并且實(shí)時(shí)更新下載信息。整體代碼考慮十分周到,對(duì)各種情況也做了相應(yīng)的處理,并且有通俗易懂的注釋。

資源截圖

代碼片段和文件信息

#include?“downloadmanager.h“
#include?
#include?
#include?
#include?

#define?DOWNLOAD_FILE_SUFFIX “_tmp“

DownLoadManager::DownLoadManager(Qobject?*parent)
:?Qobject(parent)
?m_networkManager(NULL)
?m_url(QUrl(““))
?m_fileName(““)
?m_isSupportBreakPoint(false)
?m_bytesReceived(0)
?m_bytesTotal(0)
?m_bytesCurrentReceived(0)
?m_isStop(true)
{
m_networkManager?=?new?QNetworkAccessManager(this);
}

DownLoadManager::~DownLoadManager()
{}

//?設(shè)置是否支持?jǐn)帱c(diǎn)續(xù)傳;
void?DownLoadManager::setDownInto(bool?isSupportBreakPoint)
{
m_isSupportBreakPoint?=?isSupportBreakPoint;
}

QString?DownLoadManager::getDownloadUrl()
{
return?m_url.toString();
}

//?開(kāi)始下載文件;
void?DownLoadManager::downloadFile(QString?url??QString?fileName)
{
//?防止多次點(diǎn)擊開(kāi)始下載按鈕,進(jìn)行多次下載,只有在停止標(biāo)志變量為true時(shí)才進(jìn)行下載;
if?(m_isStop)
{
m_isStop?=?false;
m_url?=?QUrl(url);
//?從url?中獲取文件名,但不是都有效;
//? QFileInfo?fileInfo(m_url.path());
//? QString?fileName?=?fileInfo.fileName();
//?將當(dāng)前文件名設(shè)置為臨時(shí)文件名,下載完成時(shí)修改回來(lái);
m_fileName?=?fileName?+?DOWNLOAD_FILE_SUFFIX;

//?如果當(dāng)前下載的字節(jié)數(shù)為0那么說(shuō)明未下載過(guò)或者重新下載
//?則需要檢測(cè)本地是否存在之前下載的臨時(shí)文件,如果有則刪除
if?(m_bytesCurrentReceived?<=?0)
{
removeFile(m_fileName);
}

QNetworkRequest?request;
request.setUrl(m_url);

//?如果支持?jǐn)帱c(diǎn)續(xù)傳,則設(shè)置請(qǐng)求頭信息;
if?(m_isSupportBreakPoint)
{
QString?strRange?=?QString(“bytes=%1-“).arg(m_bytesCurrentReceived);
request.setRawHeader(“Range“?strRange.toLatin1());
}

m_reply?=?m_networkManager->get(request);

connect(m_reply?SIGNAL(downloadProgress(qint64?qint64))?this?SLOT(onDownloadProgress(qint64?qint64)));
connect(m_reply?SIGNAL(readyRead())?this?SLOT(onReadyRead()));
connect(m_reply?SIGNAL(finished())?this?SLOT(onfinished()));
connect(m_reply?SIGNAL(error(QNetworkReply::NetworkError))?this?SLOT(onerror(QNetworkReply::NetworkError)));
}
}

//?下載進(jìn)度信息;
void?DownLoadManager::onDownloadProgress(qint64?bytesReceived?qint64?bytesTotal)
{
if?(!m_isStop)
{
m_bytesReceived?=?bytesReceived;
m_bytesTotal?=?bytesTotal;
//?更新下載進(jìn)度;(加上?m_bytesCurrentReceived?是為了斷點(diǎn)續(xù)傳時(shí)之前下載的字節(jié))
emit?signalDownloadProcess(m_bytesReceived?+?m_bytesCurrentReceived?m_bytesTotal?+?m_bytesCurrentReceived);
}
}

//?獲取下載內(nèi)容,保存到文件中;
void?DownLoadManager::onReadyRead()
{
if?(!m_isStop)
{
QFile?file(m_fileName);
if?(file.open(QIODevice::WriteOnly?|?QIODevice::Append))
{
file.write(m_reply->readAll());
}
file.close();
}
}

//?下載完成;
void?DownLoadManager::onfinished()
{
m_isStop?=?true;
QVariant?statusCode?=?m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

if?(m_reply->error()?==?QNetworkReply::NoError)
{
//?重命名臨時(shí)文件;
QFileInfo?fileInfo(m_fileName);
if?(fileInfo.exists())
{
int?index?=?m_fileName.lastIndexOf(DOWNLOAD_FILE_SUFFIX);
QString?realName?=?m_fileName.left(index);
QFile::rename(m_fileName?realName);
}
}
else
{
//?有錯(cuò)誤輸

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-09-29?22:09??MyHttpDownload_9_29\
?????目錄???????????0??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\
?????文件?????????988??2016-09-09?10:38??MyHttpDownload_9_29\MyHttpDownload.sln
?????文件???????33280??2016-09-29?22:09??MyHttpDownload_9_29\MyHttpDownload.v12.suo
?????目錄???????????0??2016-09-29?22:09??MyHttpDownload_9_29\MyHttpDownload\Debug\
?????文件????????4965??2016-09-29?20:15??MyHttpDownload_9_29\MyHttpDownload\downloadmanager.cpp
?????文件????????1106??2016-09-29?20:17??MyHttpDownload_9_29\MyHttpDownload\downloadmanager.h
?????目錄???????????0??2016-09-09?11:19??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\
?????目錄???????????0??2016-09-09?11:19??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\Debug\
?????文件????????7393??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\Debug\moc_downloadmanager.cpp
?????文件????????4574??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\Debug\moc_myhttpdownload.cpp
?????文件???????35549??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\qrc_myhttpdownload.cpp
?????目錄???????????0??2016-09-09?10:38??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\Release\
?????文件????????9612??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\GeneratedFiles\ui_myhttpdownload.h
?????文件?????????744??2016-09-28?08:53??MyHttpDownload_9_29\MyHttpDownload\main.cpp
?????文件????????5630??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\myhttpdownload.cpp
?????文件?????????878??2016-09-29?14:04??MyHttpDownload_9_29\MyHttpDownload\myhttpdownload.h
?????文件?????????156??2016-09-29?14:48??MyHttpDownload_9_29\MyHttpDownload\myhttpdownload.qrc
?????文件????????6026??2016-09-29?14:52??MyHttpDownload_9_29\MyHttpDownload\myhttpdownload.ui
?????文件???????12900??2016-09-09?11:19??MyHttpDownload_9_29\MyHttpDownload\MyHttpDownload.vcxproj
?????文件????????3213??2016-09-09?11:19??MyHttpDownload_9_29\MyHttpDownload\MyHttpDownload.vcxproj.filters
?????文件?????????677??2016-09-29?22:07??MyHttpDownload_9_29\MyHttpDownload\MyHttpDownload.vcxproj.user
?????目錄???????????0??2016-09-29?14:48??MyHttpDownload_9_29\MyHttpDownload\Resources\
?????文件????????3197??2016-09-29?14:47??MyHttpDownload_9_29\MyHttpDownload\Resources\progressbar.png
?????文件????????3070??2016-09-29?14:46??MyHttpDownload_9_29\MyHttpDownload\Resources\progressbar_back.png
?????目錄???????????0??2016-09-09?11:19??MyHttpDownload_9_29\Win32\
?????目錄???????????0??2016-09-29?22:09??MyHttpDownload_9_29\Win32\Debug\

評(píng)論

共有 條評(píng)論