我需要从url获取一个json文件,将其填入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'。
我真的不知道我在哪里做错了(Iam习惯了C,而不是Cpp),我已经读过Qt的所有人,并且无法弄清楚出了什么问题。 有什么想法吗?
感谢您并为弱技能和英语道歉
答案 0 :(得分:0)
在创建请求后立即手动调用finish()
函数。在那一刻,请求甚至没有开始,所以没有什么可以从_reply->readAll()
读取。调用应用程序finished
后,应通过偶数循环调用回复exec()
信号。
删除行:
myReply._reply->finished();
exit(1);
请求将在事件循环中异步处理。
其他问题:
reply::fonction()
不需要任何后续值; (borne.initialize() == false)
,可能无法启动事件循环。