Qt cpp не может отправить объект в подключенную функцию

Мне нужно получить json-файл из URL-адреса, заполнить его в ответе 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'.

Я действительно не знаю, где я делаю ошибку (я привык к C, а не к Cpp), я прочитал об этом весь человек из Qt и не могу понять, что происходит не так. Есть идеи?

Спасибо и прошу прощения за слабый навык и английский

1 ответ

Вы называете finish() работать вручную сразу после создания запроса. В этот момент запрос даже не запускается, поэтому читать нечего _reply->readAll(), Ответ finished Сигнал должен вызываться четным циклом после вызова приложения exec(),

Удалить строки:

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

Запрос будет обработан асинхронно в цикле событий.


Другие вопросы:

  • слот reply::fonction() не нуждается ни в каком значении повторного запуска;
  • цикл событий может быть не запущен из-за (borne.initialize() == false),
Другие вопросы по тегам