Qt网络编程:QNetworkConfigurationManager

 一、描述

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());
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值