找回密码
 立即注册
收起左侧

Qt安卓教程(4):传感器

9
回复
14280
查看
[复制链接]

尚未签到

来源: 2014-2-11 18:00:52 显示全部楼层 |阅读模式
该文章原创于Qter开源社区(www.qter.org),作者Joey_Chan,转载请注明出处!


本系列教程主要讲述与安卓移植版Qt的相关内容,如平台特性、功能限制、特定用户体验和内容发布等,其余与Qt自身非平台相关的内容不会作详细讲述,笔者默认童鞋们已经有一定的Qt功底。
另:请自备安卓机子一台,不推荐用模拟器。此篇教程使用Qt5.2,童鞋们请使用大于等于此版本的Qt。

第四篇:传感器

sensors,顾名思义就是传感器,一种将自然环境的某种特征转换为电子信号的东东。在手机里面,传感器有很多,什么加速度计,GPS,摄像头等,都属于传感器。这里将讲述如何通过Qt的Sensors库来调用这些传感器。

另外此篇教程不只适用于安卓,同样带有传感器的多个系统都适用,如三大桌面系统,手机如IOS,旗鱼,Ubuntu Touch,Tizen,黑莓等,都支持Qt Sensors,这些系统之间也只有少许差别而已。
详细资料请在文档中搜索“Qt Sensors”即可,高手们可以直接在这里跳过我的教程。
下图是一张来自Qt文档的系统兼容列表:




下面以几个例子来讲解如何使用:
1. Qt Sensors - Accel Bubble 这是Qt自带的加速度计例子,example里面有。

截图:


核心代码:(以下代码都是qml)
1. 先把模块import进来
  1. import QtSensors 5.0
复制代码
2. 增加一个加速度计的qml类型
  1. Accelerometer {
  2.         id: accel
  3.         dataRate: 100
  4.         }
复制代码
3. 激活加速度计
  1. Accelerometer {
  2.         id: accel
  3.         dataRate: 100
  4.         active:true   // 不一定要在定义里面,也可以在别的函数里手动激活
  5.         }
复制代码
4. 读取加速度计的数据,并作用在蓝色球上面
  1. onReadingChanged: {
  2.             var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .1)  // x变化值
  3.             var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .1) // y变化值

  4.             if (newX < 0)
  5.                 newX = 0

  6.             if (newX > mainWindow.width - bubble.width)
  7.                 newX = mainWindow.width - bubble.width

  8.             if (newY < 18)
  9.                 newY = 18

  10.             if (newY > mainWindow.height - bubble.height)
  11.                 newY = mainWindow.height - bubble.height

  12.                 bubble.x = newX
  13.                 bubble.y = newY
  14.         }
  15.         
  16.     // 其实就是计算x和y的函数
  17.     function calcPitch(x,y,z) {
  18.         return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
  19.     }
  20.     function calcRoll(x,y,z) {
  21.          return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
  22.     }
复制代码
以上就是加速度计API的最基本用法,具体API可以查看文档

///////////////////////////////////////////////////////////////////////////////

这里就需要说到新的creator 3.0,新的安卓套件的支持将更简便。
先以安卓项目形式打开Accel Bubble例子,然后点击“项目”选项卡,如下图:




在“运行”一栏中,展开“Deploy configurations”即可看到如上图的界面,这时需要点击“create AndroidManifest.xml”按钮,创建安卓apk需要的配置文件。(一般情况下新建的安卓项目已经创建好了,Qt自带例子里面没有才需要手动创建)
注:这里可能有个bug,用api-10可能会导致无法解析安卓配置文件,上图我就使用了api-14.
然后会转到一个配置窗口,这里是安卓apk配置信息修改窗口,可改可不改。然后点击左下角的运行,这时正常情况下会出现设备选择窗口,选择好设备机可以看见程序自动运行了。(Linux下可能会出现一堆问号的不兼容设备,解决方法请看第一篇教程开头的准备工作)


2. Qt Sensors - ShakeIt QML Example 运动手势API
确切来说这是另一种传感器API的封装,个人认为是几种传感器的数据集合重新封装(源码我没看过,猜的而已)。这个API集提供了一套手势识别的接口,Qt也特别提供了这个例子来说明如何使用。
具体可搜索“SensorGesture”来查看怎么使用这个运动手势API,也可以看看这个例子的代码(几十行而已)



(加班忙。。。没时间写下去了,请见谅)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

尚未签到

2014-2-12 09:51:36 显示全部楼层
xflcx1991 发表于 2014-2-12 09:12
感谢楼主提供教程。等这一段时间忙过去了,楼主还能继续么。

看看吧,真不好说,有时间就写
回复 支持 反对

使用道具 举报

累计签到:99 天
连续签到:1 天
2014-2-14 15:13:44 显示全部楼层
顶楼主,要坚持写下去啊
回复 支持 反对

使用道具 举报

累计签到:609 天
连续签到:1 天
2014-2-14 16:07:55 显示全部楼层
终于开始更新了,楼主加油!
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-2-16 07:29:49 显示全部楼层
支持楼主!一直关注!
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-2-19 19:50:16 显示全部楼层
最近在做相关的事,参考一下,不错
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2014-2-20 10:32:12 显示全部楼层
你是怎么同时安装qt-for-android 和qt-for-win的??我同时安装出现问题的
回复 支持 反对

使用道具 举报

尚未签到

2014-2-20 11:52:17 显示全部楼层
liyingju001 发表于 2014-2-20 10:32
你是怎么同时安装qt-for-android 和qt-for-win的??我同时安装出现问题的

我的是Linux版,平时基本不用win。

如果你怕出问题的话,你可以下载一个在线安装版,里面可以选择你需要的组件,这里就可以同时选上android和win
回复 支持 反对

使用道具 举报

累计签到:213 天
连续签到:1 天
2014-2-20 13:31:38 显示全部楼层
加速度计已经在手机里滚起来了。
楼主加油~~~
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-3-6 10:12:15 显示全部楼层
楼主万岁 ,感谢啊 正好能用上
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了