0

我需要从一个 url 获取一个 json 文件,将其填充到 QtNetworkReply *reply 中并在连接的函数中发送回复以将其转换为 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”。

我真的不知道我在哪里做错了(我习惯于 C,而不是 Cpp),我已经阅读了所有关于它的 Qt 人,但无法弄清楚出了什么问题。有任何想法吗?

谢谢你,并为薄弱的技能和英语道歉

4

1 回答 1

0

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

删除行:

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

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


其他问题:

  • 插槽reply::fonction()不需要任何返回值;
  • 事件循环可能因为(borne.initialize() == false).
于 2015-11-05T12:06:27.217 回答