【发布时间】:2016-10-28 21:13:36
【问题描述】:
一定有办法使用 Qt 读取可用 WiFi SSID 列表?
尝试过:
QNetworkConfigurationManager nwkMgr;
// UPDATE:
// Need to call nwkMgr.updateConfigurations() here
// UPDATE this code needs to run in the slot for QNetworkManager::updateCompleted signal
QList<QNetworkConfiguration> nwkCnfList = nwkMgr.allConfigurations();
for(const QNetworkConfiguration &ncnf : nwkCnfList)
{
qDebug() << ncnf.name() << ncnf.bearerType();
if (ncnf.bearerType() == QNetworkConfiguration::BearerWLAN)
{
// would like to detect WiFi here
qDebug() << "WiFi:" << ncnf.name();
}
}
环境是 Qt 5.7 和 OS X El Capitan 10.11.6。输出是:
"en1" 0
"en5" 0
"en2" 0
"bridge0" 0
"p2p0" 0
"awdl0" 0
"gif0" 0
"stf0" 0
"en0" 0
"fw0" 0
更新: 上面使用接口而不是 SSID 的结果是代码示例的第一次运行。我为我的跨平台应用程序添加了刷新按钮,并尝试在 Mac 上执行“刷新”,第二次运行应用程序启动后几秒钟显示接口,后跟所有 SSID可用的网络。那一定是我打算报告的一些 Qt 错误(?)。
但上面相同的代码在 Windows 和 Linux Ubuntu 上输出真实的 SSID 并找到 WiFi。 可以从命令行获取所需的(但我想要的不仅仅是“首选”)WiFi网络列表:
bash-3.2$ networksetup -listpreferredwirelessnetworks en0
Preferred networks on en0:
WiFi-N1
WiFi-N2
WiFi-N3
....
WiFi-NN
我还 read 从命令行调用机场程序以获取所有 WiFi 网络,并且框架二进制目录的路径很长,我不想硬编码。
请建议如何处理它。最坏的情况是在这里处理 MacOS API(在 C++ 中),它也是可以接受的。目标是读取 SSID,让用户打开一个与 Qt 的 WiFi 连接并通过它启动一些“交换”。如果需要提供密码,我们甚至可以处理“首选”预设连接,但最好也以编程方式处理。
【问题讨论】:
标签: macos qt networking