Qt網路編程之QNetworkReply

來源:互聯網
上載者:User

                                       Qt網路編程之QNetworkReply
注意:這個類中的所有函數都是可重新進入的。
這個類是從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類似。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.