虽然我可以连接到WIFI,但没有QNetworkConfiguration

时间:2018-08-04 15:15:12

标签: c++ qt qnetworkaccessmanager

在我的笔记本电脑(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 ---

后续问题:Disable Qt bearer management at runtime

1 个答案:

答案 0 :(得分:1)

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

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

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