我正在使用QNetworkSession和QNetworkConfigurationManager课程来扫描和连接到可用的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平台
答案 0 :(得分:0)
您过早地调用了updateSessionState(session-> state())。
Qt文档明确指出QNetworkSession :: open是 asyncronous 因此,如果您想获得有关会话状态的信息,您必须等待会话告诉您某些内容已发生变化。 要获得此功能,您必须编写一个插槽并将其连接到stateChanged()信号。 您还有open()信号和错误信号(),它将在会话连接打开或出错时分别触发。