Qt for Android——QSensor传感器与传感器手势的使用

一、前景介绍

       在我们用Qt进行Android应用开发的时候,免不了要对一些设备的传感器或者收回进行监测。比如摇晃手机、翻转手机、接电话时等等。QSensor为我们的开发提供了便利,让我们能够获取到这些信息和手势,从而进行我们对应的处理。

 

二、传感器和传感器手势

       传感器相关的类(如QGyroscope)可以获取到传感器的信息,比如陀螺仪、线性加速度等等,但通常情况下我们不需要自己来处理这些信息,除非你有特殊的需要。然后你得研究一大堆,比如这些传感器到底是干啥的,这些值获取过来有什么用,可能会涉及到物理知识(反正我是不太懂,获取到那些值后一脸懵逼哈哈)。通常情况下,我们只需要处理传感器手势就能够满足需求了。

       传感器手势则可以识别移动设备的某个特定动作,比如摇晃手机(摇一摇)、翻转手机等。Qt没有针对每个手势提供对应的类,而都是用的QSensorGesture这个类,并且在使用前要先获取手势列表,然后再创建手势对象。所以我个人认为,获取到的手势列表取决于你的设备支持哪些手势,在获取列表时我们就能知道我们能处理哪些手势,然后再针对我们感兴趣的手势去做相应的处理(我在Qt文档中没有找到相关的说明,全凭自己臆测哈哈,如果有错欢迎指正!)。

       本文只说如何使用,不详细介绍每种传感器和传感器手势,因为说起来太多也太复杂了(其实是我自己都还没搞懂哈哈>_<)

 

三、传感器的使用

    1. 首先,不管是传感器还是传感器手势,你都需要在pro文件中写上这一句,添入sensors模块:

QT += sensors

    2. 包含对应的头文件,以QGyroscope为例: 

#include <QGyroscope>

    3. 获取传感器状态:

QGyroscope* m_gyroscope = new QGyroscope(this);
QGyroscopeReading* m_gyro_reader = nullptr;
connect(m_gyroscope, SIGNAL(readingChanged()), this, SLOT(onGyroReadingChanged()));
m_gyroscope->start();


//处理函数
void SensorWidget::onGyroReadingChanged()
{
    m_gyro_reader = m_gyroscope->reading();
    qDebug() << "Phone's X gyroscope = " << (m_gyro_reader->x());
    qDebug() << "Phone's Y gyroscope = " << (m_gyro_reader->y());
    qDebug() << "Phone's Z gyroscope = " << (m_gyro_reader->z());
    //doSomething();
}

    4. 特别注意

        想要实时获取传感器状态不要用线程,这样会出错,要用readingChanged()信号来获取 。

 

四、传感器手势的使用

    1. 添加sensors模块

QT += sensors

    2. 包含头文件:

#include <QSensorGesture>
#include <QSensorGestureManager>

    3. 声明三个变量及初始化 

QSensorGestureManager* m_gesture_manager = new QSensorGestureManager;
QStringList m_ges_list = m_gesture_manager->gestureIds();
QSensorGesture* m_cover_gesture = nullptr;

        1) m_gesture_manager是管理这些手势的,可以用它来获取手势列表

        2) m_ges_list用来接收手势列表

        3) m_cover_gesture表示cover手势,因为不确定运行此程序的设备是否有该手势,所以初始化先置为空

    4. 监测手势并处理:

if(m_ges_list.contains("QtSensors.cover"))
{
    m_cover_gesture = new QSensorGesture(QStringList("QtSensors.cover"), this);    //若手势列表中包含此手势,为它声明变量
    connect(m_cover_gesture, SIGNAL(cover()), this, SLOT(onCover()));    //声明一个槽函数,将其连接
    if(m_cover_gesture)m_cover_gesture->startDetection();
}

//处理函数	
void SensorWidget::onCover()
{
    //doSomething();
}

        1) 首先检查这个设备的手势列表是否包含cover手势;

        2) 如果有的话为cover手势new一个QSensorGesture类型的对象;

        3) 将cover手势的信号与其对应的处理槽函数连接,设备只要检测到cover手势就会出发该信号;

        4) 调用QSensorGesture类的startDetection()函数监测cover手势的状态。

    5. 特别注意

        1) 通常情况下,手势都有与其名字相同的信号,比如上面的QtSensors.cover手势,就有一个cover()信号;

        2) 极个别的手势没有与其名字对应的信号,比如QtSensor.twist,也没有twist()信号,但是它有twistLeft()和twistRight()这两

            个信号;

        3) 再比如QtSensor.shake2,也没有shake2()信号,这时可以用通用的信号名:detected()来与它的槽函数连接。

 

五、总结

    传感器与传感器手势的使用基本就是这样,我们可以用它们来使用移动APP中很多亮眼的功能,增加用户的使用体验。但我们一般不需要直接处理传感器信号,除非有特殊需求而传感器手势又不能满足的时候,到时候你还得好好研究一下传感器!!

 

~~~好了,到这里就全部说完了,希望本文能够有用。同时如果有错误的话,可以悄悄告诉我哈哈。如果您有好的建议,请不吝赐教。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值