2015-03-31 61 views
2

我被檢查使用QNetworkAccessManager的一些簡單的例子發送我發現這個後(假設管理器是一個QNetworkAccessManager:Qt的:連接的信號的請求在QNetworkAccessManager

QNetworkRequest request; 
request.setUrl(QUrl("http://www.someserver.com")); 

QNetworkReply *reply = manager->get(request); 
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead())); 
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), 
    this, SLOT(slotError(QNetworkReply::NetworkError))); 
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), 
    this, SLOT(slotSslErrors(QList<QSslError>))); 

據我明白了,打電話給manager-> get會發出一個GET請求,然而,處理該請求的答案的插槽在之後僅與連接,這對我來說似乎沒有意義,這裏我的問題是:

  • 是不是一個問題在請求完成後將插槽連接到信號?在連接發生之前,請求是否完成並且信號是否發射,並且因此信號被遺漏並且從不處理相應的插槽?

謝謝!

L.

UPDATE:由於cyber_raj指出,這個問題已經被在這裏找到答案:Qt signal slot connection - QNetworkAccessManager

回答

1

不是問題。 獲取呼叫是異步的: http://doc.qt.io/qt-5/qnetworkaccessmanager.html#details

QNetworkAccessManager排隊它接收到的請求,並且每次運行6個異步任務。 因此,您指出的錯誤沒有多大空間。

但是,如果你害怕,你可以嘗試的第一個例子,連接管理器的信號:

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), 
     this, SLOT(replyFinished(QNetworkReply*))); 

manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); 
+0

您發佈的頁面上寫着:「6個請求並行的一個主機/端口組合在執行HTTP」。如果我正確地得到它,這意味着如果同一主機/端口組合處理的請求少於6個,我的請求將立即執行,所以我認爲問題依然存在。 – mortadelo 2015-03-31 19:30:38