Files:

The Cube House example demonstrates the use of the accelerometer to drive a camera to create a pseudo-3D effect. It also demonstrates the use of a filter to smooth out the accelerometer values.
The accelerometer is created and the filter is added.
sensor = new QAccelerometer(this);
connect(sensor, SIGNAL(readingChanged()), this, SLOT(accelerometerTimeout()));
sensor->addFilter(new smoothedaccelerometerfilter(this));
sensor->start();
When new values are available, the view is recalculated.
void View::accelerometerTimeout()
{
QVector3D g = gravity();
mainCamera->setMotionAdjustment(g);
roomCamera->setMotionAdjustment(g);
update();
}
#define ACCEL_TO_G(v) (v / 9.80665)
QVector3D View::gravity() const
{
qreal x = ACCEL_TO_G(sensor->reading()->x()) * sensitivity;
qreal y = ACCEL_TO_G(sensor->reading()->y()) * sensitivity;
qreal z = ACCEL_TO_G(sensor->reading()->z());
return QVector3D(x, y, z);
}
The filter is defined like this.
class smoothedaccelerometerfilter : public QObject, public QAccelerometerFilter
{
qreal prevX;
qreal prevY;
qreal prevZ;
bool havePrev;
public:
smoothedaccelerometerfilter(QObject *parent = 0)
: QObject(parent)
, QAccelerometerFilter()
, prevX(0)
, prevY(0)
, prevZ(0)
, havePrev(false)
{
}
bool filter(QAccelerometerReading *reading)
{
// Smooth out the reported values. Large changes are applied as-is,
// and small jitters smooth to the rest position.
if (havePrev) {
qreal xdiff = reading->x() - prevX;
qreal ydiff = reading->y() - prevY;
qreal zdiff = reading->z() - prevZ;
#define threshold 0.196133f
if (qAbs(xdiff) < threshold && qAbs(ydiff) < threshold && qAbs(zdiff) < threshold) {
reading->setX(prevX + xdiff * 0.1f);
reading->setY(prevY + ydiff * 0.1f);
reading->setZ(prevZ + zdiff * 0.1f);
}
}
prevX = reading->x();
prevY = reading->y();
prevZ = reading->z();
havePrev = true;
return true;
}
};