简体   繁体   English

在发布模式下编译时(VS 2005),不会发出QNetworkAccessManager完成的信号

[英]QNetworkAccessManager finished signal is not emitted when compiled in release mode (VS 2005)

I have a class that reads web pages. 我有一堂课,可以阅读网页。 It works as expected when it is built in the debug mode in Visual studio, but doesn't work when it is built in release mode. 在Visual Studio的调试模式下构建时,它可以按预期工作,而在发布模式下构建时,则不起作用。

Basically, the QNetworkAccessManager 's finished signal never gets emitted. 基本上, QNetworkAccessManager的完成信号永远不会发出。

I have the code stripped to the bare working minimum and it still doesn't work. 我已将代码剥离到最低工作水平,但仍然无法正常工作。 I have tried to use QtNetworkd4.lib in release mode (the same library as in debug mode) and disable optimization, but no effect. 我尝试在发布模式(与调试模式下的库相同)中使用QtNetworkd4.lib并禁用优化,但没有效果。

Qt version 4.4 Qt版本4.4

Edit 编辑
Here is some sample code. 这是一些示例代码。

Header: 标头:

#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: 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();
}

As you see, it is stripped down to a bare minimum that works in debug mode. 如您所见,它被精简到可以在调试模式下工作的最低限度。

libeay32ssleay32复制到程序的同一文件夹中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM