qt使用QNetworkAccessManager无法';我得不到错误信号
我使用qt5.0和QNetworkAccessManager下载http文件。 当我输入了一个不正确的url时,我无法得到错误信号, 但当我输入正确的url时,我可以得到完成的信号qt使用QNetworkAccessManager无法';我得不到错误信号,qt,qnetworkaccessmanager,Qt,Qnetworkaccessmanager,我使用qt5.0和QNetworkAccessManager下载http文件。 当我输入了一个不正确的url时,我无法得到错误信号, 但当我输入正确的url时,我可以得到完成的信号 这个问题的原因是什么 QNetworkReply错误信号仅适用于网络层,不适用于协议层。这意味着它将报告与HTTP服务器建立连接期间发生的所有错误。建立连接后,如果HTTP服务器正确处理,您将不会收到错误信号。即使您键入的url在4xx或5xx状态代码中产生了HTTP错误,但在服务器处理您的请求时,您的回复将以无错误
这个问题的原因是什么
QNetworkReply
错误信号仅适用于网络层,不适用于协议层。这意味着它将报告与HTTP服务器建立连接期间发生的所有错误。建立连接后,如果HTTP服务器正确处理,您将不会收到错误
信号。即使您键入的url在4xx或5xx状态代码中产生了HTTP错误,但在服务器处理您的请求时,您的回复将以无错误(网络错误)结束
如果要处理HTTP错误,则必须将reply属性与方法一起使用,并将它们与使用
error
signal1)报告的错误分开处理。检查第一个connect
的返回值。2) 将connect
调用置于get()
调用之前。@Riateche 2)不可能,因为get()
预先分配m\u
指针。无论如何,QNetworkAccessManager
在您将控制返回到事件循环之前不会启动任何操作。但是我可以得到完成的信号,这可能意味着我将控制返回到事件循环?谢谢您的回答,这对我有帮助。我还想问如果QNetworkAccessManager不在主线程中工作,我如何获得信号。现在我将QNetworkAccessManager放入一个QThread,这使我无法获得任何信号。有人告诉我QNetworkAccessManager必须在eventloop中工作?我该怎么办?你的问题与你目前的问题没有直接关系。您应该使用QNetworkAccessManager创建有关线程问题的新问题
m_request.setUrl(pDownloadInfo->url);
m_preply = pManager->get(m_request);
QObject::connect(m_preply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(DownloadError(QNetworkReply::NetworkError)));
QObject::connect(m_preply, SIGNAL(finished()), this, SLOT(ReadyRead()));