Accelerometer Sensor Example Using QtMobility Project
This code snippet shows how to use Accelerometer Sensor using Qt Mobility Project and display sensor data on the screen
Article Metadata
Code Example
Source file: Media: QtAccelerometer_QtMobility.zip
Tested with
Devices(s): N8,C7,E7
Compatibility
Platform(s): Symbian
Article
Keywords: QAccelerometer,Qt Mobility ,Sensor API
Created: chintandave_er
(18 Nov 2010)
Last edited: hamishwillee
(02 Jan 2012)
Contents |
Overview
This code snippet shows how to use QAccelerometer Sensor using Qt Mobility Project and display sensor data on the screen. This Example use Sensor API of Qt Mobilty.
Preconditions
Read this for how to CS001615 - Setting up Qt Mobility
Project File (.pro file)
- Add the Qt Mobility project configuration option in the .Pro file as shown below
CONFIG += mobility
MOBILITY += sensors
- here is the full project(.pro) file.
QT += core gui
TARGET = QtAccelerometer
TEMPLATE = app
SOURCES += main.cpp\
accelerometer.cpp
HEADERS += accelerometer.h
CONFIG += mobility
CONFIG += debug
MOBILITY = sensors
symbian {
TARGET.UID3 = 0xe239264e
# TARGET.CAPABILITY +=
TARGET.EPOCSTACKSIZE = 0x14000
TARGET.EPOCHEAPSIZE = 0x020000 0x800000
}
Header
Here is the accelerometer.h header file.
#include <QtGui/QMainWindow>
#include <QGraphicsView>
#include <QBasicTimer>
#include <QTimer>
#include <QAccelerometer> // Add Sensor Class
// add Qt Mobility Project Namespace
QTM_USE_NAMESPACE
class QGraphicsRectItem;
class QGraphicsSimpleTextItem;
class Accelerometer : public QGraphicsView
{
Q_OBJECT
public:
Accelerometer(QWidget *parent = 0);
protected:
bool event(QEvent *event);
private:
void updateXYZPosition();
private:
QGraphicsRectItem *Rect;
QGraphicsSimpleTextItem *text;
QAccelerometer *accelerometerSensor;
QBasicTimer Timer;
QTimer inactiveTimer;
};
Source
#include "accelerometer.h"
#include <QGraphicsRectItem>
#include <QGraphicsSimpleTextItem>
#include <QResizeEvent>
#include <QTimerEvent> // timer event
#include <QDebug>
Accelerometer::Accelerometer(QWidget *parent) : QGraphicsView(parent), Rect(0), text(0), accelerometerSensor(0)
{
QGraphicsScene *scene = new QGraphicsScene(this);
setScene(scene);
Rect = new QGraphicsRectItem();
text = new QGraphicsSimpleTextItem(Rect);
text->setBrush(Qt::gray);
scene->addItem(Rect);
accelerometerSensor = new QAccelerometer(this);
inactiveTimer.setSingleShot(true);
if (!Timer.isActive())
Timer.start(20, this);
// start the sensor
if (!accelerometerSensor->isActive())
accelerometerSensor->start();
if (!accelerometerSensor->isActive())
{
qDebug() << "accelerometer sensor didn't start!" << endl;
}
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
bool Accelerometer::event(QEvent *event)
{
switch (event->type()) {
case QEvent::Timer:
if (static_cast<QTimerEvent*>(event)->timerId() == Timer.timerId())
updateXYZPosition(); // update the xyz position
break;
default:
break;
}
return QGraphicsView::event(event);
}
void Accelerometer::updateXYZPosition()
{
QAccelerometerReading *reading = accelerometerSensor->reading();
qreal xacceleration = 0.0f;
qreal yacceleration = 0.0f;
qreal zacceleration = 0.0f;
if (reading) {
xacceleration = reading->x();
yacceleration = reading->y();
zacceleration = reading->z();
// for debug purpose
qDebug() << "xacceleration x" << endl;
qDebug() << xacceleration << endl;
qDebug() << "yacceleration y" << endl;
qDebug() << yacceleration << endl;
qDebug() << "zacceleration z" << endl;
qDebug() << zacceleration << endl;
// set the text and display it on the screen
QLocale c(QLocale::C);
text->setText("x: " + c.toString(xacceleration) + " y: " + c.toString(yacceleration) + " z: " + c.toString(zacceleration));
}
}
Postconditions
Here is the QtAccelerometer Application's Screenshot. You can change the Accelerometer Sensor data from Qt Simulator.
Example Applications
Example application can be found on the following link File:QtAccelerometer QtMobility.zip.



