无法用QnetworkSession Qt第一次连接到wifi网络

时间:2015-03-03 14:37:32

标签: qt qml ubuntu-14.04

我正在使用QNetworkSessionQNetworkConfigurationManager课程来扫描和连接到可用的Wifi网络。

SessionWidget::SessionWidget(const QNetworkConfiguration &config, QObject *parent):QObject(parent)
    {

        session = new QNetworkSession(config, this);
        session->open();
        connect(session, SIGNAL(stateChanged(QNetworkSession::State)),
            this, SLOT(updateSessionState(session->state)));
     }


void SessionWidget::updateSessionState(QNetworkSession::State state)
    {

        switch (state) {
        case QNetworkSession::Invalid:
            qDebug("Network Status :: Invalid");
            break;
        case QNetworkSession::NotAvailable:
            qDebug("Network Status ::NotAvailable");
            break;
        case QNetworkSession::Connecting:
            qDebug("Network Status ::Connecting");
            break;
        case QNetworkSession::Connected:
            emit uiSignal("Connected",session->configuration().name());
            qDebug("Network Status ::Connected");
            break;
        case QNetworkSession::Closing:
            qDebug("Network Status :: Closing");
            break;
        case QNetworkSession::Disconnected:
            emit uiSignal("Disconnected",session->configuration().name());
               qDebug("Network Status :: Disconnected");
            break;
        case QNetworkSession::Roaming:
                qDebug("Network Status :: Roming");
            break;    
        default:
            qDebug("Network Status :: Unknown");
            qDebug(" ");
        }
            break;
        case QNetworkSession::Disconnected:
            emit uiSignal("Disconnected",session->configuration().name());
               qDebug("Network Status :: Disconnected");
            break;
        case QNetworkSession::Roaming:
                qDebug("Network Status :: Roming");
            break;    
        default:
            qDebug("Network Status :: Unknown");
            qDebug(" ");
        }

我可以连接到至少连接一次到系统的网络(通过Ubuntu)。 如果我第一次通过我的应用程序尝试连接到网络,请获取 QNetworkSession :: Invalid 标志。我正在使用Ubuntu 14.04平台

1 个答案:

答案 0 :(得分:0)

您过早地调用了updateSessionState(session-> state())。

Qt文档明确指出QNetworkSession :: open是 asyncronous 因此,如果您想获得有关会话状态的信息,您必须等待会话告诉您某些内容已发生变化。 要获得此功能,您必须编写一个插槽并将其连接到stateChanged()信号。 您还有open()信号和错误信号(),它将在会话连接打开或出错时分别触发。

相关问题