一、描述
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());