还是有许多不懂的问题,大佬看了如果愿意教我的话,我会非常乐意求教的。
QNetworkConfigurationManager
QNetworkConfiguration
QNetworkSession
QNetworkInterface
//创建QNetworkConfigurationManager 对象
QNetworkConfigurationManager manager;
//获取所有的wifi信息
//allConfigurations里面可以填参数具体解释下面给出
//如果不写参数就是所有的能扫描到的WiFi,但是我不知道是不是我的问题
//会扫到一个 “” 空白名字的WiFi
QList<QNetworkConfiguration> configs = manager.allConfigurations();
//更新所有的网络配置信息
//manager.updateConfigurations();
// 扫描可用的WiFi网络
qDebug() << "扫描到的WiFi:";
//遍历List
foreach (const QNetworkConfiguration &config, configs)
{
//如果是无线 LAN 接口 且 名字不为空
if (config.bearerType() == QNetworkConfiguration::BearerWLAN && config.name() != "" )
{
//打印WiFi名字
qDebug() << "SSID:" << config.name();
}
}
Undefined:
??此状态用于临时配置,例如用户尚未实际为其创建配置的新发现的 WLAN。
??我的理解是能扫描到的范围内的没有连接过的WiFi。
Defined:
??定义的配置对系统来说是已知的,但不能立即使用(例如,配置的 WLAN 不在范围内或以太网电缆当前未插入机器)。
??这个我也不太理解,输出是和Discovered一样的。懂得dd我一下0.0。
.Discovered:
??发现的配置可以立即用于创建新的 QNetworkSession。 如果配置是服务网络,则如果至少一个底层接入点配置具有已发现状态,则设置此标志。
??我的理解是范围内能扫描到的所有已经连接过的WiFi。
Active:
??该配置当前由开放网络会话使用(QNetworkSession::isOpen())。
??我的理解是当前连接的WiFi。
我这个连接只能连接当前电脑连接过并且保存了密码的WIFI,并不能连接从未连接配置过的WiFi,有懂的大佬踢我一下。
//容器对象什么的上面已经创建了
QString ssidToConnect = "xxxx";//WiFi名字
foreach (const QNetworkConfiguration &config, configs)
{
if (config.bearerType() == QNetworkConfiguration::BearerWLAN && config.name() == ssidToConnect)
{
QNetworkSession session(config);、
//打开会话
session.open();
//这里应该提供一点延时 或者使用等待打开函数 但是这个函数我用着并不能连接WiFi 懂得大佬踢我一下
//如果连接成功
if (session.isOpen()) {
qDebug() << "Connected to WiFi network:" << config.name();
} else {
qDebug() << "Failed to connect to WiFi network:" << config.name();
}
break;
}
}
auto list = QNetworkInterface::allInterfaces();
//遍历
foreach (QNetworkInterface interface, list)
{
//如果有安装VMware虚拟机的话,会出现两个虚拟网卡
//匹配关键字"VMware"。来过滤虚拟网卡
//if(interface.humanReadableName().contains("VMware"))
//continue;
//如果不是wlan过滤掉
//humanReadableName 顾名思义 人读的名字 即 本地连接、WLAN等等
if( interface.humanReadableName() != "WLAN" )
continue;
//一般都会有两个ip地址,一个ipv4一个ipv6地址
//根据协议版本,来过滤掉ipv6地址
foreach (auto entry ,interface.addressEntries())
{
if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << "ip:" <<entry.ip();
}
}