2009-12-24 65 views
1

我正在嘗試使用QNetworkManager編寫應用程序。我簡化了代碼以解決問題。下面的代碼掛了,我不知道爲什麼:Qt4 QNetworkManager掛起

main.cpp中:

#include <QApplication> 
#include "post.h" 

int main(int argc, char *argv[]) { 
    QApplication app(argc, argv); 
    post("http://google.com/search", "q=test"); 
    return app.exec(); 
} 

post.h:

#ifndef _H_POST 
#define _H_POST 

#include <QNetworkAccessManager> 
#include <QNetworkRequest> 

class post : public QObject { 
    Q_OBJECT 

    public: 
     post(QString URL, QString data); 

    public slots: 
     void postFinished(QNetworkReply* reply); 

    protected: 
     QNetworkAccessManager *connection; 

}; 

#endif 

post.cpp:

#include <QApplication> 
#include <QUrl> 
#include "post.h" 

post::post(QString URL, QString data) { 
    connection = new QNetworkAccessManager(this); 
    connect(connection, SIGNAL(finished(QNetworkReply*)), this, SLOT(postFinished(QNetworkReply*))); 
    connection->post(QNetworkRequest(QUrl(URL)), data.toAscii()); 
} 

void post::postFinished(QNetworkReply*) { 
    qApp->exit(0); 
} 

一些谷歌搜索顯示,這可能是因爲我有一個線程上的所有內容,但我不知道如何改變它在Qt中...沒有任何網絡示例sh這個。

+0

它掛在connect-> post或app.exec中嗎? – 2009-12-24 16:21:08

+0

app.exec 看來post :: postFinished永遠不會被調用 – singpolyma 2009-12-24 16:24:59

+0

您運行的是哪個版本的Qt? – 2009-12-24 16:30:50

回答

4

我剛剛嘗試過,結果相同。問題是你只通過調用構造函數來創建後期對象。既然你沒有指定是被破壞掉了馬上對象(檢查此創建一個析構函數,看看當它被調用。)

嘗試:

post p("http://google.com/search","q=test"); 

那麼你的插槽被調用。

+0

這是一個有效的指針,並且 - > rawHeaderList()返回一個空列表。 – singpolyma 2009-12-24 16:29:27

+0

美好的時光......我完全掠過那部分,試圖獲得發佈的課程代碼。 – 2009-12-24 17:58:05