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

Posted

技术标签:

【中文标题】在发布模式下编译时不会发出 QNetworkAccessManager 完成信号(VS 2005)【英文标题】:QNetworkAccessManager finished signal is not emitted when compiled in release mode (VS 2005) 【发布时间】:2011-01-25 23:27:44 【问题描述】:

我有一个阅读网页的课程。在 Visual Studio 中以 debug 模式构建时按预期工作,但在 release 模式下构建时不起作用。

基本上,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)? @ravil,在问这样的问题之前,您应该查看官方 Qt 错误跟踪器bugreports.qt.nokia.com。例如,像您发布的那样存在未解决的错误:bugreports.qt.nokia.com/browse/QTBUG-5997。 @Johnny 为什么你认为 QTBUG-5997 与这个问题有关? @Piotr,这个问题通常与类似的 Qt 错误之一有关。目前 QNAM 和finished() 信号存在几个活跃的错误。 【参考方案1】:

libeay32ssleay32 复制到与您的程序相同的文件夹中。

【讨论】:

以上是关于在发布模式下编译时不会发出 QNetworkAccessManager 完成信号(VS 2005)的主要内容,如果未能解决你的问题,请参考以下文章

在调试或发布/分发模式下编译时 iOS 应用程序的性能

类构造函数从未在发布模式下执行

linux下编译时的默认库和头文件搜索路径

我的程序意外完成

Firebase 消息传递仅在调试模式下工作,而不是在发布模式下工作 (iOS)

新的 Angular 项目不会在严格模式下编译