【问题标题】:Can't connect to wifi network using QT无法使用 QT 连接到 wifi 网络
【发布时间】:2021-09-15 01:25:20
【问题描述】:

我正在尝试使用以下代码连接到 wifi 网络 但它不工作也没有给出任何错误

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QNetworkConfiguration cfg;
    QNetworkConfigurationManager ncm;
    auto nc = ncm.allConfigurations();

    for (auto &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();
}

它在终端中显示“所需网络名称”的输出。

连接到所需的网络

【问题讨论】:

  • 您实际期望发生什么?请注意,QNetworkSession::open(); 是异步的,在您调用 exec() 时尚未完成,并且在某些系统上什么也不做
  • 感谢您的回复,我在session-&gt;open() 之后添加了QThread::msleep(20000);,这给了它 20 秒的连接时间,但仍然无法连接,wifi 网络也受密码保护,我必须做吗代码有什么变化吗?
  • 来自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 signals

标签: c++ qt qt5 wifi qtnetwork


【解决方案1】:

您操作系统中的实际 NI 名称可能与您预期的不同。尝试更详细地调试它:

for (auto &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 上,这些名称将用引号括起来,很可能是因为 Qt 使用 WMIC 后端来获取它们。如果你的NI在GUI中叫“Desired Network”,其实就是"\"Desired Network\""

【讨论】:

  • 感谢您的回复,这部分代码运行良好(我已更新问题以获得更多说明)。这个问题是它正在检测网络但没有连接到网络。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
相关资源
最近更新 更多