【发布时间】:2018-08-04 15:15:11
【问题描述】:
在我的笔记本电脑(Qt 5.11,Win10 x64)上,我通过 WIFI 连接,Qt https 连接工作。我想知道为什么我看不到任何活动的网络配置,但可以创建 HTTP 请求。同样m_networkConfigManager->isOnline() 始终是false。我错过了什么,还是这只是一个 Qt 错误?
// signal / slot
connect(m_networkConfigManager, &QNetworkConfigurationManager::updateCompleted, this, &CApplication::onNetworkConfigurationsUpdateCompleted, Qt::QueuedConnection);
// called via signal
void CApplication::onNetworkConfigurationsUpdateCompleted()
{
const QNetworkConfiguration config = m_networkConfigManager->defaultConfiguration();
for (const QNetworkConfiguration &config : m_networkConfigManager->allConfigurations())
{
// never reached
const QString cs = CNetworkUtils::toString(config);
CLogMessage(this).info("Network config: %1") << cs;
}
// always false
bool isOnline = m_networkConfigManager->isOnline();
.... debug messages, I see onNetworkConfigurationsUpdateCompleted being called 3 times
....
}
--- 编辑---
- 我看到
onNetworkConfigurationsUpdateCompleted被调用了 3 次,然后以某种方式每隔 10 秒定期调用一次。 - 在我初始化
m_networkConfigManager之后我调用m_networkConfigManager->updateConfigurations();
--- 编辑 2 ---
此版本产生相同的结果(错误)(未排队)
connect(m_networkConfigManager, &QNetworkConfigurationManager::updateCompleted, [ = ]
{
bool isOnline = m_networkConfigManager->isOnline();
qDebug() << isOnline;
});
这永远不会被调用
connect(m_networkConfigManager, &QNetworkConfigurationManager::onlineStateChanged, [](bool isOnline)
{
qDebug() << isOnline; // never get here
});
--- 编辑 3 ---
【问题讨论】:
-
我建议您将
QNetworkConfigurationManager::onlineStateChanged连接到带有调试消息的插槽/lambda,看看它是否有任何变化。 -
如果问题是是否调用了
onNetworkConfigurationsUpdateCompleted,那么是的,我可以在调试器中看到它被调用了 3-4 次,我也看到了我刚刚在代码中显示的调试消息上面的片段。更新了问题,谢谢提示。 -
其实我的想法更倾向于以下方向:能不能把
isOnline短时间变成true,等你查询的时候再变回false? -
更新了上面的代码,onlineChanged 在我的场景中实际上从来没有触发过什么。顺便说一句,通过 LAN 的电缆连接它可以工作。
-
在我看来,您所做的一切都是正确的,但它的表现却不如预期。也许你应该把它作为一个错误报告给 Qt。
标签: c++ qt qnetworkaccessmanager