2014-06-13 2 views
0

이 문서의 내용을 잘 읽고 있습니다. http://developer.nokia.com/community/wiki/Creating_an_HTTP_network_request_in_Qt HTTP 연결을 구현하려고 시도했지만 코드가 오류없이 컴파일되지만 프로그램이 시작될 때 충돌이 발생합니다.QNetworkAccessManager가 실패합니다.

//coreeng.cpp

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

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

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

void coreEng::url(){ 
    QUrl url("http://www.forum.nokia.wiki"); 
    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; 

} 

//coreeng.h

#ifndef COREENG_H 
#define COREENG_H 

#include <QObject> 
#include <QNetworkAccessManager> 

class coreEng : public QObject 
{ 
    Q_OBJECT 
     public: 
      explicit coreEng(QObject *parent = 0); 
     private slots: 

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


     private: 
      QNetworkAccessManager* nam; 

}; 

#endif // COREENG_H 

당신은 당신의 C++ 코드에 더 많은 관심을 기울여야한다

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

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

    coreEng mConnect; 
    mConnect.connect(); 

    return a.exec(); 
} 

답변

0

//main.cpp :

QNetworkAccessManager* nam; 

nam이 사용되지만 결코 만들어지지 않습니다. 당신은 coreEng 생성자를 만들어야합니다

coreEng::coreEng(QObject *parent) : 
    QObject(parent), nam(new QNetworkAccessManager(this)) 
{ 
} 

또 다른 문제는 다음과 같습니다

delete reply; 

Qt는 docs 말 :

이 신호에 연결된 슬롯에 응답 개체를 삭제하지 마십시오. deleteLater()를 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 이런 뜻이야? 명시 적 coreEng (QObject * 부모 = 0) { QNetworkAccessManager * nam; } – brad

+1

아니요. 이렇게하면 생성자의 수명에 제한된 스택에 로컬 변수가 만들어집니다. 'nam = new QNetworkAccessManager();와 같은 것이 그것입니다. 모든 일련의 질문을 토대로 C++ 과정을 고려할 수 있습니다. –

+0

@brad, 내 업데이트 된 답변을 참조하십시오. –

관련 문제