響應在小型Qt應用程序,我有包裹在一個單獨的類一個NetworkAccessManager(NAM)。這個類的NAM對象被四個獨立的表單類使用。每個表單類都會向一個單獨的php發出請求(並且PHP在睡眠(3)期間至少需要3秒鐘)。辛格爾頓QNetworkAccessManager不引導至所需的形式
現在有兩種情況:
案例一:當NAM,每種形式,連接形式的插槽構造函數。 在這種情況下,當我同時從所有四種形式發送請求;所有響應被定向到的一種形式(就是那個最早是在射擊的要求),而不是請求它的形式。
情況II:當NAM連接(燒成請求)和斷開(當接收到的應答),以形成的函數槽(而不是構造函數)。 在這種情況下,當I(即,在小於3秒)發送請求同時從所有四種形式;那麼只有第一個響應返回,其餘的不會返回。這與代碼一致,因爲一旦收到第一個請求的回覆,單身NAM即被斷開連接。因此其他請求無法處理。
所有形式的類是相同的,使用相同的代碼。下面是代碼(案例二專用):
void Request2::slotStartRequest(){
m_Req2 = NetworkAccessManager::getInstance();
connect(m_Req2, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReplyFinished(QNetworkReply*)));
QString postData = "value=222";
m_Req2->post(QNetworkRequest(QUrl(path)), postData.toUtf8());
}
void Request2::slotReplyFinished(QNetworkReply *reply){
disconnect(m_Req2, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotReplyFinished(QNetworkReply*)));
ui->TEdit_Req2->setText(reply->readAll());
reply->deleteLater();
}
雖然這兩種情況的代碼非常相似。此代碼是特定於案例II的。對於案例I,唯一的變化是'connect'和'getInstance'代碼放在構造函數中(並且沒有'斷開連接')。
該代碼可以正常使用每個表單類的一個NetworkAccessManager對象。
但是,如何實現所需的行爲(對於整個應用程序,只有一個NAM):響應僅針對請求它的表單,並且其他表單的請求不應受到影響?
那麼,你再次幫助我。很高興與您的支持:-) – Jatin
那麼,如果我必須從一個單一的形式與Singleton NAM兩個同時請求;那麼我需要兩個QNetworkReply對象嗎?或者還有其他更簡單的方法嗎? – Jatin
@Jatin對於兩個請求,你將有兩個'QNetworkReply'對象。這取決於您的項目設計如何處理這些答覆。你可以有兩個不同的'Request2'實例,每個這樣的實例可以使用它自己的回覆。可以使用一個「請求2」和多個回覆。 –