У меня есть класс, который читает веб-страницы. Он работает, как и ожидалось, когда он построен в режиме отладки в 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();
}
Как видите, он урезан до минимума, который работает в режиме отладки.