区分开放和密码锁定的可用 WiFi 网络

Distinguish between open and password locked available WiFi networks

我正在开发一些在 Linux workstation 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 上使用 Qt 5.7.0 GCC 64bit 的应用程序,其中显示了可供选择的 WiFi 网络,核心代码在这里:

void UeWiFiDiscoveryTask::run()
{
    QList<QNetworkConfiguration> networksList=this->ueNetworkConfigurationManager()->allConfigurations();
    QList<UeWiFiNetworkRecord*> wifiList=QList<UeWiFiNetworkRecord*>();

    foreach(QNetworkConfiguration network,
            networksList)
    {
        if(network.isValid()&&network.bearerType()==QNetworkConfiguration::BearerWLAN&&network.state()==QNetworkConfiguration::Discovered)
        {
            qDebug() << Q_FUNC_INFO
                     << network.state();

            wifiList.append(new UeWiFiNetworkRecord(new QImage(":/images/testWifi.jpg"),
                                                    network.name()));

            emit this->ueSignalWiFiFound(*wifiList.last());
        }   // if
    }   // foreach

    emit this->ueSignalWiFiDiscoveryFinished(wifiList);
}   // run

代码在单独的线程上运行并且运行良好。但是,我正在阅读 Qt Bearer Management docs,但我找不到如何区分 Free WiFiencrypted/protected WiFi 的方法。我如何添加这样的功能?

P.S.: 我知道这是如何做的问题,我准备好获得一些负面评价,但是,我一直在阅读文档几天,我迷路了!

假设这是一个带有 NetworkManager 的系统,那么 QNetworkConfiguration::identifier() 将 return NetworkManager 配置项的 D-Bus ObjectPath。

即您可以使用 QtDBus 在该对象上调用 org.freedesktop.NetworkManager.Settings.Connection.GetSettings() 方法,我认为它应该包含您要查找的信息