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)
,