如何从 QNetworkAccessManager::networkAccessibleChanged() 获得信号?

Posted

技术标签:

【中文标题】如何从 QNetworkAccessManager::networkAccessibleChanged() 获得信号?【英文标题】:How do I get a signal from QNetworkAccessManager::networkAccessibleChanged()? 【发布时间】:2013-08-21 18:50:00 【问题描述】:

我正在使用 QNetworkAccessManager 来执行 HTTP 请求。发现我们使用的网络连接偶尔会掉线,想主动检测一下什么时候掉线。

我已将插槽连接到 QNetworkAccessManager::networkAccessibleChanged() 信号,但我的插槽没有看到任何输出。

在寻找解决方案时,我最接近答案的是以下讨论:http://www.qtcentre.org/threads/37514-use-of-QNetworkAccessManager-networkAccessible

但是,建议的解决方案并没有解决我的问题。

关于我可能做错的任何建议?

【问题讨论】:

【参考方案1】:

好的,经过更多的实验,我找到了答案……

原来我的问题是我的系统上有几个以太网接口。

在我的问题链接的讨论中,建议添加以下代码:

QNetworkAccessManager* mNetworkAccessManager = new QNetworkAccessManager();
QNetworkConfigurationManager manager;
mNetworkAccessManager->setConfiguration(manager.defaultConfiguration());

QNetworkAccessManager::setConfiguration() 的文档表明默认配置是自动使用的;所以这是不必要的,但它让我走上了正轨。

我的问题是默认配置附加到与我的连接所经过的接口不同的接口;所以我做了以下事情:

QString ifName = "eth2";
QNetworkAccessManager* pNetworkAccessManager = new QNetworkAccessManager();
QNetworkConfigurationManager manager;
foreach(QNetworkConfiguration cfg, manager.allConfigurations()) 
  if (cfg.name() == ifName) 
    pNetworkAccessManager->setConfiguration(cfg);
    break;
  

现在,我的槽被调用了。

我希望有一种更简单的方法来获得所需的配置。现在,我必须弄清楚如何让配置以 IP 地址而不是接口名称开头。

【讨论】:

以上是关于如何从 QNetworkAccessManager::networkAccessibleChanged() 获得信号?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QNetworkAccessManager 发送 DELETE 请求?

使用 QWebKit 的永久 cookie——从哪里获得 QNetworkAccessManager?

在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?

如何通过继承 QNetworkAccessManager 使用 createRequest 伪造请求?

如何使用 QNetworkAccessManager 作为 QT DLL 函数下载文件?

QT 从 QWebView 的 QNetworkAccessManager 读取数据