Не удается подключиться к сети Wi-Fi с помощью QT

#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. Спасибо за ваш ответ, эта часть кода работает просто отлично(я обновил вопрос для получения дополнительных разъяснений). Эта проблема заключается в том, что он обнаруживает сеть, но не подключается к сети.