Qt cpp无法将obj发送到连接功能

时间:2015-11-05 11:13:09

标签: c++ json qt qnetworkreply

我需要从url获取一个json文件,将其填入QtNetworkReply *回复并在连接的函数中发送回复以将其转换为QbyteArray以解析我的Json响应。

但是当我进入我的连接功能时,我不能用那个回复填充QByteArray(总是空的) 这是我的代码:

int main(int ac, char *av[])
{
    Borne         borne(ac, av);
    reply          myReply;

    QNetworkAccessManager networkManager;
    QUrl url("http://vps202498.ovh.net:8080/ws/rest/v.1/stores/categories/150/products");
    QNetworkRequest request;
    request.setUrl(url);
    myReply._reply = networkManager.get(request);
    QObject::connect(myReply._reply, SIGNAL(finished()), &myReply, SLOT(fonction()));
    myReply._reply->finished();
    exit(1);
    if (borne.initialize() == false)
        return (false);
    return (borne._app->exec());
}

这是我的连接功能:

IProduct        *reply::fonction()
{
    QByteArray  List;

    std::cout << "connected" << std::endl;
    List = _reply->readAll();
    if (List.isNull())
        exit(6);
    return (NULL);
}

我的.H:

class reply : public QObject
{
Q_OBJECT
public:
    reply() {};
    ~reply() {};

    QNetworkReply *_reply;

public slots:
    IProduct    *fonction();

private :

};

我不能std :: cout“已连接”,但总是退出错误日志'6'。

我真的不知道我在哪里做错了(Iam习惯了C,而不是Cpp),我已经读过Qt的所有人,并且无法弄清楚出了什么问题。 有什么想法吗?

感谢您并为弱技能和英语道歉

1 个答案:

答案 0 :(得分:0)

在创建请求后立即手动调用finish()函数。在那一刻,请求甚至没有开始,所以没有什么可以从_reply->readAll()读取。调用应用程序finished后,应通过偶数循环调用回复exec()信号。

删除行:

myReply._reply->finished();
exit(1);

请求将在事件循环中异步处理。

其他问题:

  • 广告位reply::fonction()不需要任何后续值;
  • 由于(borne.initialize() == false),可能无法启动事件循环。