分类: 嵌入式
2015-04-09 14:25:56
原文地址:如何用Qt设定网络接入方式 作者:landuochong
Contents[] |
本文以一个例子程序为大家介绍如何使用Qt设定手机应用程序的网络接入方式。例子程序的功能是强制应用程序使用WLAN打开网页,如果没有WLAN可用时才使用默认的接入方式。(当然打开网页只是一个应用方向,我们也可以以选定的接入方式直接收发数据)。
首先在构造函数中:
accessmanager = new QNetworkAccessManager();
configmanager.updateConfigurations ();
connect(&configmanager, SIGNAL(updateCompleted ()), this, SLOT(scanFinished()));
调用updateConfigurations()的目的是更新系统已知的所有NetworkConfigurations的当前状态信息。这个过程会有些慢,因此次函数被设置成了异步执行方式。当次函数执行完后,会发出一个updateCompleted ()的信号,当我们收到这个信号之后,我们就可以进行处理了,此时我们得到的NetworkConfigurations的信息都会是最新的。
下面我们来看scanFinished()函数是如何实现的:
void MainWindow::scanFinished()
{
qDebug()<< "come to void MainWindow::scanFinished()";
web = new QWebView(this);
web->resize(size());
QList<QNetworkConfiguration> allConfigurations = configmanager.allConfigurations();
QList<QNetworkConfiguration> myInterestConfigurations;
while (!allConfigurations.isEmpty())
{
QNetworkConfiguration temConfigration = allConfigurations.takeFirst();
qDebug()<< temConfigration.name();
qDebug()<< temConfigration.bearerType();
qDebug()<< temConfigration.state();
qDebug()<< temConfigration.isValid();
if(QNetworkConfiguration::BearerWLAN == temConfigration.bearerType ())
{
qDebug()<< "get a WLAN Configuration";
myInterestConfigurations.append(temConfigration);
}
}
qDebug()<< "***************************************";
while(!myInterestConfigurations.isEmpty())
{
QNetworkConfiguration mytemConfigration = myInterestConfigurations.takeFirst();
if(QNetworkConfiguration::Discovered == mytemConfigration.state())
{
qDebug()<< "Configuration Name:" << mytemConfigration.name();
qDebug()<< "setting Configuration now ... " ;
accessmanager->setConfiguration(mytemConfigration);
web->page()->setNetworkAccessManager(accessmanager); // !!force webpage to use WLAN,
break; // !!or we can just use this accessmanager to send and receive data
}
}
qDebug()<< "opening webpage ... " ;
web->load(QUrl(""));
web->showMaximized();
}
我们通过configmanager.allConfigurations();来获得当前所有系统已知的NetworkConfigurations,如果这个Configuration是WLAN,并且其状态是可用的,于是我们就让accessmanager 使用这个Configuration。接下来的事情就是使用这个accessmanager 了。我们既可以直接使用这个accessmanager 来收发数据,accessmanager 的所以操作自然是通过WLAN来完成的。我们也可以把这个accessmanager 赋给webpage,于是webpage就使用WLAN的方式进行打开网页的操作了。