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 и не могу понять, что происходит не так.
Есть идеи?

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

0

Решение

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

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

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

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


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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]