QML类型说明-加速度计Acceleromete…

Accelerometer

ImportStatement:   import QtSensors5.0

Since:  QtSensors 5.0

Inherits:     Sensor

Properties

accelerationMode : AccelerationMode

 

DetailedDescription

加速度计元件报告X,Y,Z轴的加速度,这个元件包装于QAccelerometer类,更详细的内容看QAccelerometer的文档。同时看AccelerometerReading。

 

PropertyDocumentation

accelerationMode : AccelerationMode

这个属性持有当前的加速度计模式。

关于这个属性的信息,看QAccelerometer::accelerationMode的文档。这个属性的QML代码,在QtSensors 5.1的文档。

 

示例代码:

下面的程序让一个小球,根据加速计状态的变化,在屏幕上平滑移动。

注意:

     ApplicationWindow继承了Window的属性

     Accelerometer继承了Sensor的属性

 

import QtQuick 2.1

import QtQuick.Controls1.0   //为ApplicationWindow

import QtSensors 5.0 //为Accelerometer

 

ApplicationWindow {

    title:"Accelerate Bubble"  //窗口的标题

    id:mainWindow   //窗口的id

    width:320  //窗口的宽

    height:480  //窗口的高

    visible:true  //true表示显示窗口,false表示窗口不可见

 

   Accelerometer {

       id: accel //加速度计的id

 

//dataRate是加速度计能检测到变化的最高频率,单位HZ

//这个属性取决于硬件,再程序中设置这个属性会让程序不可移植,

//并可能和其他的应用程序冲突。

//这个属性为0,表示应用程序不关心dataRate

       dataRate:100                    

       active:true //激活加速度计,这样加速度计有值返回

       onReadingChanged: {  //有值返回时出发

           var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y,accel.reading.z) * .1)  //计算X坐标

           var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y,accel.reading.z) * .1)  //计算Y坐标

 

           if (isNaN(newX) || isNaN(newY))

               return;  //如果X和Y的坐标不是数字,则返回

 

           if (newX < 0)

               newX = 0  //如果X坐标小于0,则返回

 

           if (newX > mainWindow.width - bubble.width)

               newX = mainWindow.width - bubble.width //如果移动到最右边,则不动

 

           if (newY < 18)

               newY = 18  //移动到距离顶部18个像素的地方不动

 

           if (newY > mainWindow.height - bubble.height)

               newY = mainWindow.height - bubble.height //移动到底部,不动

 

               bubble.x = newX  //设置小球X坐标

               bubble.y = newY  //设置小球Y坐标

       }

    }

 

    functioncalcPitch(x,y,z) {

       return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);

   }//三角函数,通过加速度计的3个返回值计算Y方向变化的值

    functioncalcRoll(x,y,z) {

        return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);

   }//三角函数,通过加速度计的3个返回值计算X方向变化的值

 

    Image {

       id: bubble

       source: "content/Bluebubble.svg"  //图片的资源

       smooth: true  //平滑处理

       property real centerX: mainWindow.width / 2 //新加的属性,中心的X坐标

       property real centerY: mainWindow.height / 2 //新加的属性,中心的Y坐标

       propertyreal bubbleCenter: bubble.width / 2 //新加的属性,小球的中心

       x: centerX - bubbleCenter  //小球x坐标

       y: centerY - bubbleCenter  //小球y坐标

 

       Behavior on y {  //小球y坐标变化的平滑动画,持续0.1秒

           SmoothedAnimation {

               easing.type: Easing.Linear

               duration: 100

           }

       }

       Behavior on x {  //小球x坐标变化的平滑动画,持续0.1秒

           SmoothedAnimation {

               easing.type: Easing.Linear

               duration: 100

           }

       }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值