2011-01-25 2 views
0

웹 페이지를 읽는 클래스가 있습니다. Visual Studio에서 디버그 모드로 빌드 될 때 예상대로 작동하지만 릴리스 모드로 빌드 될 때는 작동하지 않습니다.릴리스 모드 (VS 2005)로 컴파일하면 QNetworkAccessManager 종료 신호가 생성되지 않습니다.

기본적으로 QNetworkAccessManager의 완료 신호는 방출되지 않습니다.

맨손으로 작동하는 최소한으로 코드가 제거되었지만 여전히 작동하지 않습니다. 릴리스 모드 (디버그 모드에서와 동일한 라이브러리)에서 QtNetworkd4.lib을 사용하려고 시도했지만 최적화를 비활성화했지만 효과가 없습니다.

Qt는 버전 4.4

편집 여기
은 몇 가지 예제 코드입니다.

헤더 :

#include <QNetworkAccessManager> 
#include <QNetworkReply> 
#include <QNetworkRequest> 
#include <QStringList> 

class WebReader : public QObject{ 
    Q_OBJECT 

public: 
    QStringList *pageData_; 
    WebReader(); 
    ~WebReader(); 
    void fetch(const QString &url); 

public slots: 
    void slotReplyFinished(QNetworkReply *reply); 

protected: 
    QNetworkAccessManager *netManager_; 

private: 
    QNetworkReply *netReply_; 
}; 

CPP는 :

WebReader::WebReader(){ 
    netManager_ = new QNetworkAccessManager(this); 
    pageData_ = NULL; 
    connect(netManager_, SIGNAL(finished(QNetworkReply *)), 
          this, SLOT(slotReplyFinished(QNetworkReply *))); 
} 
WebReader::~WebReader(){  
} 

// Send a request to read a web page 
void WebReader::fetch(const QString &url){ 
    netReply_ = netManager_->get(QNetworkRequest(QUrl(url))); 
} 

// SLOT that accepts the read data from the webpage 
void WebReader::slotReplyFinished(QNetworkReply *reply){ 
    if (NULL != pageData_){ 
     delete pageData_; 
    } 
    pageData_ = new QStringList(QString(reply->readAll()).split(QString("\n"))); 
    netReply_->deleteLater(); 
} 

보시다시피, 그것은 디버그 모드에서 작동하는 최소한까지 제거된다.

+0

Visual C++ Express 2010 컴파일러를 사용하여 Qt Creator에서 컴파일 할 때 릴리스 및 디버그 모드에서 모두 작동합니다. –

+0

Qt의 이전 버전 (현재 4.7.1)과 이전 버전의 Visual C++ (현재 2010)를 사용하는 이유는 무엇입니까? –

+0

QT가 아닌 QT입니다. –

답변

0

복사 libeay32 및 프로그램과 같은 폴더에 ssleay32.

관련 문제