2016-05-25 50 views
2

對於信號:什麼時候QNetworkReply :: error信號後跟一個finished()信號?

QNetworkReply::error(QNetworkReply::NetworkError code) 

Qt的文檔說:當回覆於處理檢測到錯誤

這個信號被髮射。 完成的()信號可能會出現,表示連接已結束。

具體而言,什麼時候完成()信號被髮射,什麼時候發射?

+1

[這](http://stackoverflow.com/questions/18404483/should-i-connect-to-qnetworkreplyerror-as-well)可能會回答你的問題。 –

回答

3

什麼時候QNetworkReply :: error信號後跟一個finished()信號? 具體而言,什麼時候完成()信號被髮射,何時 不是?

信號finished()是由於數據傳輸完成或傳輸過程中發生錯誤而發出的請求。信號error()發生在finished()之前發生錯誤。實際上,我們可以處理finished()「錯誤」和「傳輸成功」。

舉例說明:

// connect 'finished' signal with consumer 
connect(&s_networkAccessManager, SIGNAL(finished(QNetworkReply*)), 
     this, SLOT(requestFinished(QNetworkReply*))); 



void MyClass::requestFinished(QNetworkReply* pReply) 
{ 
    if (pReply) 
    { 
     if (pReply->error() == QNetworkReply::NoError) 
      consumeData(pReply) 
     else 
      errorHandler(pReply->error(), pReply->errorString()); 
    } 
} 
+0

謝謝。我擔心的是,是否有可能「由於錯誤而實際已經完成了回覆,並且沒有更多內容會被讀入,但是完成()信號未被取消」? – Nyaruko

+1

@Nyaruko在實踐中,我們對這樣的處理程序感到滿意。我們還連接了networkAccessManager.post()返回的QNetworkReply :: sslErrors信號。 – AlexanderVX

+0

對於我的情況,我只是通過普通的http下載一些文件(其中一些文件可能很大,比如100MB)。是否有必要擔心sslErrors?你使用的是什麼版本的Qt? – Nyaruko