Chinaunix首页 | 论坛 | 博客
  • 博客访问: 403340
  • 博文数量: 168
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 13:46
文章分类

全部博文(168)

文章存档

2015年(51)

2014年(30)

2013年(87)

我的朋友

分类: 嵌入式

2015-04-09 14:25:56

转自:

From Forum Nokia Wiki

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的方式进行打开网页的操作了。

下载例程

Media:wifi.zip

阅读(1155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~