【问题标题】:No QNetworkConfiguration although I can connect to WIFI没有 QNetworkConfiguration 虽然我可以连接到 WIFI
【发布时间】: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-&gt;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 ---

跟进问题:Disable Qt bearer management at runtime

【问题讨论】:

  • 我建议您将QNetworkConfigurationManager::onlineStateChanged 连接到带有调试消息的插槽/lambda,看看它是否有任何变化。
  • 如果问题是是否调用了onNetworkConfigurationsUpdateCompleted,那么是的,我可以在调试器中看到它被调用了 3-4 次,我也看到了我刚刚在代码中显示的调试消息上面的片段。更新了问题,谢谢提示。
  • 其实我的想法更倾向于以下方向:能不能把isOnline短时间变成true,等你查询的时候再变回false
  • 更新了上面的代码,onlineChanged 在我的场景中实际上从来没有触发过什么。顺便说一句,通过 LAN 的电缆连接它可以工作。
  • 在我看来,您所做的一切都是正确的,但它的表现却不如预期。也许你应该把它作为一个错误报告给 Qt。

标签: c++ qt qnetworkaccessmanager


【解决方案1】:

从 Qt 错误跟踪系统开始,很可能是 Qt 错误。对于WIFI,整个承载系统似乎都坏了,或者至少不是很可靠。由于平台(OS)的不同,不同的 Qt 版本存在不同的问题,因此有点难以追踪。

我正在使用一个简单的 hack 解决方法(不好的做法,但有效)。如果没有网络配置,这可能意味着我遇到了这个问题,或者根本没有网络接口。在那种情况下,我只需将QAM 设置为Accessible 并通过http 请求进行测试。如果可以的话,WIFI是可用的。

const QList<QNetworkConfiguration> allConfigurations = m_networkConfigManager->allConfigurations();
if (allConfigurations.isEmpty()) {
    m_accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);`
    .... test Qt http request ....     
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多