重置QNetworkAccessManager后端的方法 [英] Method to reset the QNetworkAccessManager backend
问题描述
情况是这样的:
我从同一个ftp服务器下载多个文件,需要用户名和密码。我成功下载了几个文件,然后为不存在的文件发送GET。该请求报告失败。然后,我发送一个GET请求,申请一个应该有效的文件。该请求永远不会发出完成信号或错误。
Qt 4.7.4
请帮忙!这让我疯狂。我认为如果我可以以某种方式重置ftp后端,这个问题可能是可以解决的。 您正在连接 QNetworkReply
signal finished()
像这样:
QObject :: connect(reply,SIGNAL(finished()),netty,SLOT(finished()));
请尝试从 QNetworkAccessManager
像这样:
connect(& network,SIGNAL(已完成(QNetworkReply *)),netty,SLOT(已完成(QNetworkReply * )));
请注意,您必须更改完成()插槽的原型。
最后一个方法是设置一个调用如下函数的计时器:
void check(QNetworkReply * reply){
if(reply!= NULL){
if(reply-> isFinished())
finished(reply);
else
reply-> abort();
}
}
并注意这个错误:
https://bugreports.qt-project。 org / browse / QTBUG-3443
It seems that QNetworkAccessManager does not handle missing files retrieved by ftp if the ftp server requires authentication.
The situation is this: I'm downloading multiple files from the same ftp server that requires username and password. I successfully download a few files then send a GET for a file that does not exist. That request reports failure. I then send a GET request for a file that should be valid. That request never emits a finished signal or error.
Qt 4.7.4
Please help! This is driving me nuts. I think that if I can somehow reset the ftp backend, this problem might be solvable.
You are connecting the QNetworkReply
signal finished()
like this:
QObject::connect(reply, SIGNAL(finished()), netty, SLOT(finished()));
Instead try the finished signal from the QNetworkAccessManager
like this:
connect(&network, SIGNAL(finished(QNetworkReply *)), netty, SLOT(finished(QNetworkReply *)));
Note that you will have to change the prototype for your finished() slot.
A final method would be to set a timer that calls a function like this:
void check(QNetworkReply *reply){
if(reply != NULL){
if(reply->isFinished())
finished(reply);
else
reply->abort();
}
}
And be aware of this bug:
https://bugreports.qt-project.org/browse/QTBUG-3443
这篇关于重置QNetworkAccessManager后端的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!