2015-04-16 87 views
0

我正在編寫一個應用程序以等間隔請求一個網頁,以便對其進行任何更改(以檢查是否接收到新數據)。在這裏我是如何做到的。使用QNetworkAccessManager GET多次

private: 

QNetworkReply *r; 
QNetworkAccessManager *m; 
QNetworkRequest request; 
QTimer *timer; 
在構造

m = new QNetworkAccessManager(this); 
timer = new QTimer(this); 
connect(r , SIGNAL(readyRead()), this , SLOT(readit())); 
connect(timer, SIGNAL(timeout()), this, SLOT(update())); 
timer->start(1000); 

readit功能,

void MainWindow::readit(){ 
QString st; 
st=r->readAll(); 
m->deleteResource(request); 
ui->textBrowser->append(st); 
} 

更新功能,

void MainWindow::update() 
{ 
request.setUrl(QUrl("http://localhost/test/default.php")); 
r = m->get(request); 
} 

我的問題是m->get(request)在其第一次調用獲取請求只,當它再次呼籲它什麼都不做。我做了幾個實驗,但最終沒有取得成功。我使用按鈕點擊將第二個請求更改爲另一個網頁,但它沒有做任何事情。

所以我需要專家的幫助,如何更新獲取請求並獲得新的答覆多次。

並且我想知道我做了正確的事情還是有可靠的方法從服務器獲取有關數據更改的數據,而不是定期檢查網站。

回答

2

我看到以下問題: - (!)

  1. readyRead火災的每個請求任意次數,包括零次,但你把它當作如果它發射一次。使用finished信號,這是做你想做的事情:一次,不多不少。

  2. update插槽不連接任何插槽的請求。

+0

我將'readyRead'信號改爲'finished'信號,它也沒有工作。我不明白第二個答覆的意思。在更新中,我更新了獲取請求,現在,當它的完成信號觸發時,它不會觸發'readit'函數。我做錯了什麼,請解釋一下。 –

+0

好了,終於我知道了,我需要將信號連接到該功能中的特定插槽。有效。非常感謝。我不會一個人想出來的。非常感謝.... :) –