连接丢失时未检测到 QNetworkReply 错误信号

Posted

技术标签:

【中文标题】连接丢失时未检测到 QNetworkReply 错误信号【英文标题】:QNetworkReply error signal not detected when connection is lost 【发布时间】:2016-03-10 10:32:36 【问题描述】:

我正在使用 Qt5.5 从远程服务器下载文件,一切正常,但我无法检测到 QNetworkReply 何时返回错误。 实际上,我正在尝试检查用户是否正在下载文件并且突然失去 Internet 连接(因为为什么不 :-))。为此,我开始下载并在几秒钟后拔下以太网电缆。

在这种情况下是否发出信号QNetworkReply::error(QNetworkReply::NetworkError)?如果是,为什么我没有在下面的代码中输入我的插槽?

void MyClass::download(QUrl url)

    QNetworkRequest request = QNetworkRequest(url);

    QNetworkReply *reply = pManager.get(request);

    // finished() is called after error(), but try both
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestError(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));


void MyClass::requestError(QNetworkReply::NetworkError err)

    qDebug() << "error";


void MyClass::requestFinished()

    qDebug() << "finished";

我也像这样连接了访问管理器:

connect(&pManager, SIGNAL(finished(QNetworkReply*)), SLOT(requestFinished(QNetworkReply*)));

当互联网连接没有中断时,我会进入槽 requestFinished(),但如果不再有互联网,我不会进入任何槽。

我做错了吗?

【问题讨论】:

【参考方案1】:

好吧,没关系,我做错了。由于我想检查互联网连接,我必须通过 QNetworkAccessManager 检查网络可用性,这样做:

QNetworkConfigurationManager manager;
pManager.setConfiguration(manager.defaultConfiguration());

connect(&pManager, SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)), this, SLOT(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility)));

而当互联网出现故障时,我会在相应的插槽中。

【讨论】:

以上是关于连接丢失时未检测到 QNetworkReply 错误信号的主要内容,如果未能解决你的问题,请参考以下文章

spring websocket客户端没有检测到网络连接丢失

我可以使用 Python3.6 Sanic 在 websockets 中检测到“连接丢失”吗?

如何检测套接字连接何时丢失?

QNetworkReply - 建立连接,写入第一个字节等

从通道读取时未检测到“死锁”

Swift - WebView 在加载时未检测到滑动