重置QNetworkAccessManager后端的方法 [英] Method to reset the QNetworkAccessManager backend

查看:382
本文介绍了重置QNetworkAccessManager后端的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看来如果ftp服务器需要验证,QNetworkAccessManager不能处理ftp检索到的缺失文件。

情况是这样的:
我从同一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆