Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3537071
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: 嵌入式

2011-04-08 13:17:25

转自:

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

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