首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QNetworkAccessManager失败

QNetworkAccessManager失败
EN

Stack Overflow用户
提问于 2014-06-13 19:08:04
回答 1查看 470关注 0票数 0

我遵循这个文档Qt试图实现一个http连接,我的代码编译没有错误,但是当程序启动时,它会崩溃。

//coreeng.cpp

代码语言:javascript
复制
#include "coreeng.h"
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QImageReader>

coreEng::coreEng(QObject *parent) :
    QObject(parent)
{
}

void coreEng::connect(){
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(finishedSlot(QNetworkReply*)));
}

void coreEng::url(){
    QUrl url("http://www.forum.nokia.wiki");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
}

void coreEng::finishedSlot(QNetworkReply* reply){

    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

    if (reply->error() == QNetworkReply::NoError)
    {

        QImageReader imageReader(reply);
        QImage pic = imageReader.read();

        QByteArray bytes = reply->readAll();  // bytes
        QString string(bytes); // string
    }

    else
    {

    }

    delete reply;

}

//核心工程h

代码语言:javascript
复制
#ifndef COREENG_H
#define COREENG_H

#include <QObject>
#include <QNetworkAccessManager>

class coreEng : public QObject
{
    Q_OBJECT
        public:
            explicit coreEng(QObject *parent = 0);
        private slots:

        public slots:
            void connect();
            void url();
            void finishedSlot(QNetworkReply* reply);


        private:
            QNetworkAccessManager* nam;

};

#endif // COREENG_H

//main.cpp

代码语言:javascript
复制
#include <QCoreApplication>
#include "coreeng.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    coreEng mConnect;
    mConnect.connect();

    return a.exec();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 19:18:12

您应该更加注意您的c++代码:

代码语言:javascript
复制
QNetworkAccessManager* nam;

nam被使用,但从未被创建。您应该在coreEng构造函数中创建它:

代码语言:javascript
复制
coreEng::coreEng(QObject *parent) :
    QObject(parent), nam( new QNetworkAccessManager(this) )
{
}

另一个问题是:

代码语言:javascript
复制
delete reply;

Qt 文档说:

不要删除连接到此信号的插槽中的应答对象。使用deleteLater()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24212345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档