在QT中为wifi连接设置静态IP

setting static IP for wifi connection in QT

我正在尝试创建一个基于 QT 的应用程序来扫描和连接 WiFi 网络。我使用 this example 作为参考代码。

  1. 是否可以使用 QNetworkConfiguration 或任何相关的 class 为 WiFi 连接分配静态 IP?
  2. 如何验证受密码保护的网络?

提前致谢......

我使用下面的代码集创建了一个网络会话..

void BearerMonitor::createNewSessionFromQml(QString ssid)
{
    QList<QNetworkConfiguration> allConfigurations = manager.allConfigurations();
    while (!allConfigurations.isEmpty()) {
        QNetworkConfiguration config = allConfigurations.takeFirst();
        if(config.name()==ssid)
            createSessionFor(config);
    }
}

SessionWidget::SessionWidget(const QNetworkConfiguration &config, QObject *parent):QObject(parent)
    {
        session = new QNetworkSession(config, this);
        session->open();
}

不,你不能。至少不只是 Qt API。

请阅读this and in particular thisQNetworkConfiguration 只是一个管理网络配置的工具。本机代码/OS 交互需要编辑此类配置。从第二个 link:

Note that the QNetworkConfiguration object only provides limited information about the configuration details themselves. It's main purpose is to act as a configuration identifier through which link layer connections can be created, destroyed and monitored.

甚至 "start/stop network interfaces" 的说法也不完全正确,因为这种功能仅在某些 OS 中可用(不是移动设备)。有关详细信息,请参阅第二个 link 的 "Platform capabilities" 部分。

同样的推理也适用于密码问题。一旦使用相应的密码在 OS 中注册了网络(由于本机代码或用户实际注册了它),NetworkConfigurationManager, granted that the list of configurations is updated via updateConfigurations() 就可以使用新的配置。新配置包含密码,但您无法从 Qt API 对其进行编辑。

如前所述,本机代码是唯一的解决方案。不过,Apple does not want you to mess up with WiFi programatically 因为私有 API 不能在 iOS > 5.1 中使用(Qt 支持的最旧版本与 Qt 5.4 一样)。