angelus:reply = manager.get(QNetworkRequest(QUrl("http://www.qtcn.org/")));
如果你是复用这行代码,有可能有多个地点调用这个函数,不要把reply定义成成员变量
尽量在使用的时候创建
QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://www.qtcn.org/")));
.......
谢谢回复!我试试!
我发现有这么一个现象,关键代码如下:
request.setUrl(QUrl(postUrl));
reply = manager->get(request);
//直接deleteLaterreply->deleteLater();reply = nullptr;
上面的代码不会崩溃,但好像没有这么做的。---------------------------------------------------------------------------------
request.setUrl(QUrl(postUrl));
reply = manager->get(request);
connect(reply, &QNetworkReply::finished, this, [=]()
//在QNetWorkReply的finished信号中deleteLater{
if (reply->error()) {
//错误直接返回,因为连条码都没有
qDebug() << "回传返回错误" << reply->errorString();
reply->deleteLater();
reply = nullptr;
return;
}
reply->deleteLater();
reply = nullptr;
});
上面的代码会很快崩溃。这点其实不是很理解,因为我程序的另外一个类中的http请求在finished中槽deleteLater,虽然也会崩溃,但不会这么快。-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
request.setUrl(QUrl(postUrl));
reply = manager->get(request);
connect(manager, &QNetworkReply::finished, this, [=](QNetworkReply *reply)
//改成manager的finished信号,然后使用传过来的reply{
qDebug() << reply;
reply->deleteLater();
reply = nullptr;
});
-------------------------------------------------------------------------------------
这个最奇诡它不会崩溃(当然我也只是运行半个小时左右吧,长了不知道会不会崩),但是我发现每次执行的时候qDebug() << reply; 会执行很多次,打印如下QNetworkReplyHttpImpl(0x8ce5450)
QNetworkReplyHttpImpl(0x8ce5450)
QNetworkReplyHttpImpl(0x8ce5450)
QNetworkReplyHttpImpl(0x8ce5450)
前面一两次一条没有,但是后面的越来越多,一次执行打印出的地址都是一样的,但是每次执行的地址又是不一样的。显然,感觉监听这个也不靠谱。