#c #qt #qt5 #wifi #qtnetwork
Вопрос:
Я пытаюсь подключиться к сети Wi-Fi, используя следующий код, но он не работает и не выдает никаких ошибок
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkConfiguration cfg;
QNetworkConfigurationManager ncm;
auto nc = ncm.allConfigurations();
for (auto amp;x : nc)
{
if (x.bearerType() == QNetworkConfiguration::BearerWLAN)
{
if (x.name() == "Desired Network")
qDebug() <<"Connecting to "<< x.name();
cfg = x;
}
}
auto session = new QNetworkSession(cfg);
session->open();
return a.exec();
}
Он показывает вывод в терминале с «именем нужной сети».
Подключение к Нужной сети
Комментарии:
1. чего вы на самом деле ожидаете? Обратите внимание , что
QNetworkSession::open();
это асинхронно, не завершается к моменту вызова exec (), и в некоторых системах ничего не делает2. Спасибо за ваш ответ, я добавил
QThread::msleep(20000);
, послеsession->open()
чего даю ему 20 секунд для подключения, но он все еще не подключается, также сеть Wi-Fi защищена паролем, нужно ли мне вносить какие-либо изменения в код для этого?3. Из документации для
QThread::msleep
:"Avoid using this function if you need to wait for a given condition to change. Instead, connect a slot to the signal that indicates the change or use an event handler"
. Так что подключайтесь и реагируйте на соответствующиеQNetworkSession
сигналы .
Ответ №1:
Фактические имена NI в вашей операционной системе могут отличаться от ожидаемых. Попробуйте отладить его более подробно:
for (auto amp;x : nc)
{
if (x.bearerType() == QNetworkConfiguration::BearerWLAN)
{
qDebug() << x.name() << " is a WIFI";
if (x.name() == "Desired Network")
qDebug() <<"Connecting to "<< x.name();
cfg = x;
}
else
qDebug() << x.name() << "n";
}
Например, в Windows эти имена будут заключены в кавычки, скорее всего, из-за серверной части WMIC, используемой Qt для их получения. Если ваш NI в графическом интерфейсе называется «Нужной сетью», на самом деле это ""Desired Network""
Комментарии:
1. Спасибо за ваш ответ, эта часть кода работает просто отлично(я обновил вопрос для получения дополнительных разъяснений). Эта проблема заключается в том, что он обнаруживает сеть, но не подключается к сети.