qt使用QNetworkAccessManager无法';我得不到错误信号

qt使用QNetworkAccessManager无法';我得不到错误信号,qt,qnetworkaccessmanager,Qt,Qnetworkaccessmanager,我使用qt5.0和QNetworkAccessManager下载http文件。 当我输入了一个不正确的url时,我无法得到错误信号, 但当我输入正确的url时,我可以得到完成的信号 这个问题的原因是什么 QNetworkReply错误信号仅适用于网络层,不适用于协议层。这意味着它将报告与HTTP服务器建立连接期间发生的所有错误。建立连接后,如果HTTP服务器正确处理,您将不会收到错误信号。即使您键入的url在4xx或5xx状态代码中产生了HTTP错误,但在服务器处理您的请求时,您的回复将以无错误

我使用qt5.0和QNetworkAccessManager下载http文件。 当我输入了一个不正确的url时,我无法得到错误信号, 但当我输入正确的url时,我可以得到完成的信号


这个问题的原因是什么

QNetworkReply
错误信号仅适用于网络层,不适用于协议层。这意味着它将报告与HTTP服务器建立连接期间发生的所有错误。建立连接后,如果HTTP服务器正确处理,您将不会收到
错误
信号。即使您键入的url在4xx或5xx状态代码中产生了HTTP错误,但在服务器处理您的请求时,您的回复将以无错误(网络错误)结束


如果要处理HTTP错误,则必须将reply属性与方法一起使用,并将它们与使用
error
signal

1)报告的错误分开处理。检查第一个
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()));