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
}
}
}
}