一、描述

QNetworkConfigurationManager 提供对系统已知网络配置的访问,并使应用程序能够在运行时检测系统功能。


二、类型成员

1、enum QNetworkConfigurationManager::Capability:承载API的系统能力。

  • CanStartAndStopInterfaces:可以启动和停止网络会话及其底层接入点。 如果未设置此标志,则 QNetworkSession 只能监视但不能影响接入点的状态。在某些平台上,此功能可能需要提升用户权限。 此选项特定于平台,可能并不总是可用。
  • DirectConnectionRouting:网络会话及其socket可以绑定到特定的网络接口。 任何通过socket的数据包都会到达指定的网络接口,从而忽略标准路由表条目。 
  • SystemSessionSupport:如果设置了此标志,则底层平台确保在最后一个网络会话关闭之前网络接口不会closed()。 这适用于多进程。如果缺少平台会话支持,则此 API 只能确保同一进程内的网络会话的上述行为。一般来说,移动平台有这样的支持,而大多数桌面平台缺乏这种能力。
  • ApplicationLevelRoaming:该系统使应用程序能够控制系统漫游行为。应用程序可以启动漫游(以防当前链接不合适),并在系统确定更合适的接入点时进行咨询。
  • ForcedRoaming:系统断开现有接入点并通过更合适的接入点重新连接。应用程序对此过程没有任何控制权,必须重新连接其活动socket。
  • DataStatistics:如果设置了此标志,则 QNetworkSession 可以提供有关传输和接收数据的统计信息。
  • NetworkSessionRequired:如果设置了此标志,则平台要求在执行网络操作之前创建网络会话。

三、成员函数

1、[signal] void configurationAdded(const QNetworkConfiguration &config)

每当向系统添加新的网络配置时,就会发出此信号。新配置由 config 指定。

2、[signal] void configurationChanged(const QNetworkConfiguration &config)

 当配置的状态改变时发出这个信号。

3、[signal] void configurationRemoved(const QNetworkConfiguration &config)

当配置即将从系统中删除时,会发出此信号。 由 config 指定的已删除配置无效,但保留名称和标识符。

4、[signal] void onlineStateChanged(bool isOnline)

当设备从在线模式变为离线模式或反之亦然时,会发出此信号。 isOnline 表示设备的新状态。

只要 allConfigurations(QNetworkConfiguration::Active) 返回一个包含至少一个条目的列表,状态就被认为是在线的。

5、[signal] void updateCompleted()

当配置更新完成时发出此信号。这样的更新可以通过 updateConfigurations() 启动。

6、void updateConfigurations()

启动所有配置的更新。这可用于启动 WLAN 扫描或其他耗时的更新,这些更新可能需要获得正确的配置状态。

此调用是异步的。 完成此更新后,将发出 updateCompleted() 信号。 如果发现新配置或删除或更改旧配置,则更新过程可能会触发一个或多个 configurationAdded()、configurationRemoved() 、 configurationChanged() 信号的发射。

如果此更新导致配置状态发生更改,则所有现有 QNetworkConfiguration 实例都会自动更新。

7、QList<QNetworkConfiguration> allConfigurations(QNetworkConfiguration::StateFlags filter = QNetworkConfiguration::StateFlags())

返回符合给定过滤器的配置列表。

默认情况下,此函数返回所有(已定义和未定义)配置。

尽管系统具有有效的配置,但具有特定 SSID 的无线网络可能只能在特定区域访问。因此,过滤器标志可用于将列表限制为仅发现和可能连接的配置。

请注意,此函数返回所有配置的状态,因为它们在此函数调用时已知。例如,如果定义了 WLAN 类型的配置,则系统可能必须执行 WLAN 扫描以确定它是否实际可用。为了获得最准确的状态,应使用 updateConfigurations() 来更新每个配置的状态。请注意,此类更新可能需要一些时间。它的完成由 updateCompleted() 发出信号。在没有配置更新的情况下,此函数返回调用时的最佳估计值。

如果对 WLAN 配置感兴趣,建议在 QNetworkConfigurationManager 实例化后调用 updateConfigurations() 一次(WLAN 扫描太耗时,无法在构造函数中执行)。在此之后,随着系统报告任何更改,数据会自动保持最新。

    QNetworkConfigurationManager mgr;
    QNetworkConfigurationManager::connect(&mgr,&QNetworkConfigurationManager::updateCompleted,[&mgr]
    {
        auto list = mgr.allConfigurations(QNetworkConfiguration::Active);
        qDebug()<<list.size();
        list = mgr.allConfigurations(QNetworkConfiguration::Discovered);
        qDebug()<<list.size();
        list = mgr.allConfigurations(QNetworkConfiguration::Defined);
        qDebug()<<list.size();
        list = mgr.allConfigurations(QNetworkConfiguration::Undefined);
        qDebug()<<list.size();
    });
    mgr.updateConfigurations();

8、QNetworkConfiguration configurationFromIdentifier(const QString &identifier)

返回标识符的 QNetworkConfiguration

9、QNetworkConfiguration defaultConfiguration()

返回要使用的默认配置。

10、bool isOnline()        (实用,可以用来检测网络是否连接)

如果系统被认为是通过活动网络接口连接到另一个设备,则返回 true。

等效于以下代码:

    QNetworkConfigurationManager mgr;
    QList<QNetworkConfiguration> activeConfigs = mgr.allConfigurations(QNetworkConfiguration::Active);
    if (activeConfigs.count() > 0)
        Q_ASSERT(mgr.isOnline());
    else
        Q_ASSERT(!mgr.isOnline());
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐