Мне нужно получить 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 и не могу понять, что происходит не так.
Есть идеи?
Спасибо и прошу прощения за слабые навыки и английский
Вы называете finish()
работать вручную сразу после создания запроса. В этот момент запрос даже не запускается, поэтому читать нечего _reply->readAll()
, Ответ finished
Сигнал должен вызываться чётным циклом после вызова приложения exec()
,
Удалить строки:
myReply._reply->finished();
exit(1);
Запрос будет обработан асинхронно в цикле событий.
Другие вопросы:
reply::fonction()
не нуждается ни в каком значении повторного запуска;(borne.initialize() == false)
,Других решений пока нет …