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

时间:2011-01-25 23:27:44

标签: c++ visual-studio qt

我有一个读取网页的课程。它在Visual Studio中以调试模式构建时按预期工作,但在发布模式下构建时不起作用。

基本上,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();
}

如您所见,它被剥离到最低限度,在调试模式下工作。

1 个答案:

答案 0 :(得分:0)

libeay32 ssleay32 复制到您的程序所在的文件夹中。