2014-06-15 61 views
0

儘管沒有任何請求數據包命中我的服務器,但我的代碼中沒有錯誤。我運行tcpdump端口80並沒有任何東西穿過電線,wireshark說同樣的。基本QNetworkAccessManager無法發送請求

//coreeng.h

#ifndef COREENG_H 
#define COREENG_H 

#include <QObject> 
#include <QNetworkAccessManager> 

class coreEng : public QObject 
{ 
    Q_OBJECT 
     public: 



     private slots: 

     public slots: 
      void connect(); 
      void url(); 
      void finishedSlot(QNetworkReply* reply); 


     private: 
      QNetworkAccessManager* nam; 

}; 

#endif // COREENG_H 

//coreengine.cpp

#include "coreeng.h" 
#include <QNetworkAccessManager> 
#include <QUrl> 
#include <QNetworkRequest> 
#include <QNetworkReply> 
#include <QImageReader> 

coreEng::coreEng(QObject *parent) : 
    QObject(parent) 
{ 
} 

explicit coreEng(QObject *parent = 0) 
    { 
     nam = new QNetworkAccessManager(); 
    } 

void coreEng::connect(){ 
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)), 
    this, SLOT(finishedSlot(QNetworkReply*))); 
} 

void coreEng::url(){ 
    QUrl url("http://www.myserver.com"); 
    QNetworkReply* reply = nam->get(QNetworkRequest(url)); 
} 

void coreEng::finishedSlot(QNetworkReply* reply){ 

    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); 

    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); 

    if (reply->error() == QNetworkReply::NoError) 
    { 

     QImageReader imageReader(reply); 
     QImage pic = imageReader.read(); 

     QByteArray bytes = reply->readAll(); // bytes 
     QString string(bytes); // string 
    } 

    else 
    { 

    } 

    delete reply(); 

} 

//main.cpp

#include <QCoreApplication> 
#include "coreeng.h" 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    coreEng mConnect; 
    mConnect.connect(); 

    return a.exec(); 
} 

回答

0

你永遠不叫coreEng::url()所以你永遠不發出請求。

我也不確定你的構造函數是否正確。爲什麼不只是拋棄顯式構造函數並在默認構造函數中創建QNetworkAccessManager?