注意:這個類中的所有函數都是可重入的。
這個類是從Qt4.4引入的。
詳細描述:
QNetworkReply 類包含了發送給QNetworkManager的數據和首部。
QNetworkReply類包含了發送給QNetworkAccessManager請求的所有應答數據。和QNetworkRequest類似,這些數據包含了一個URL和一些首部信息(同時包含解析后的和原始形式的),以及一些和應答狀態相關的信息,再加上應答信息自身的內容。
QNetworkReply是一個順序訪問的QIODevice,這也意味着一旦數據從該對象中讀取出來,那么該對象就不再持有這些數據。因此,當需要保存數據的時候,這個工作應該由應用程序完成。無論什么時候從網絡中獲取到更多數據並進行處理,readyRead()信號都會被觸發。
downloadProgress()信號在接收到數據的時候也會被發送,但是它所持有的數據量不一定就是真實接收到的數據量,如果對這些內容的傳輸進行操作(例如:解壓縮,移除協議頭信息)。
盡管QNetworkReply是一個與應答信息關聯的QIODevice,它同樣觸發uploadProgress()信號,這表明upload操作擁有這些數據。
注意:不要在連接到error()或者finished()的槽函數里刪除該對象,應該使用deleteLater()。
成員類型文檔
enum QNetworkReply::NetworkError
表明在處理請求的過程中所有可能的錯誤情況
Constant Value Description
《一些枚舉類型,內容太多,自己看幫助文檔》
typedef QNetworkReply::RawHeaderPair
RawHeaderPair是一個 QPair<QByteArray, QByteArray>,第一個QByteArray 代表頭部的名字;第二個代表頭部信息。
void QNetworkReply::finished () [signal]
當應答信息被處理完畢時這個信號就會被觸發。當這個信號被觸發后,就不會再對應答數據或者元數據進行更新。除非close()被調用,否則應答信息會一直被打開等待讀取,可以通過read()或者readAll()方法讀取數據。特別地,在readyRead后如果沒有調用read(),那么調用readAll()就會將所有的內容都存儲在一個QByteArray中。
這個信號和QNetworkAccessManager::finished()是串聯觸發的。
注意:
不要在與這個信號關聯的槽函數中直接刪除掉QNetworkReply對象,應該使用deleteLater()。
你可以在收到finished()信號之前使用isFinished()函數檢查一個QNetworkReply是否已經結束。
另外一些重要的函數就是對應答信息的讀取函數了:
void QNetworkReply::downloadProgress ( qint64 bytesReceived, qint64 bytesTotal ) [signal]
這個信號被觸發,用來表明該網絡請求的下載部分的進度。如果該網絡請求沒有相關聯的下載部分,這個信號在參數bytesReceived和bytesTotal的值都為0的時候會被觸發一次。
參數bytesReceived表明已經接收到的數據量,而bytesTotal則表明總共期望下載的數據量。如果期望下載的數據量未知,那么bytesTotal就為-1。
當bytesReceived和bytesTotal相等的時候就表明下載完畢。那時,bytesTotal就不等於-1了。
注意,bytesReceived和bytesTotal的值也許都和size()不同,通過read()或者readAll()獲得的總的數據量,或者表明數據量的頭部的值(ContentLengthHeader)。造成這種情況的原因是,協議頭部或者是數據在下載的過程總可能被壓縮。
void QNetworkReply::uploadProgress ( qint64 bytesSent, qint64 bytesTotal ) [signal]
該信號表示的是網絡請求中上傳的部分,其它都和上面的downloadProgress類似