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();
}
보시다시피, 그것은 디버그 모드에서 작동하는 최소한까지 제거된다.
Visual C++ Express 2010 컴파일러를 사용하여 Qt Creator에서 컴파일 할 때 릴리스 및 디버그 모드에서 모두 작동합니다. –
Qt의 이전 버전 (현재 4.7.1)과 이전 버전의 Visual C++ (현재 2010)를 사용하는 이유는 무엇입니까? –
QT가 아닌 QT입니다. –