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

时间:2013-08-21 18:50:01

标签: qt qnetworkaccessmanager

我正在使用QNetworkAccessManager来执行HTTP请求。我们发现我们使用的网络连接偶尔会脱机,我想主动检测链接何时关闭。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

好的,经过一些实验,我找到了答案......

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

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

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地址开始配置,而不是接口名称。