Введение в разработку приложений на платформе Atom/MeeGo. Граничин О.Н - 142 стр.

UptoLike

142
(портрет, пейзаж)), так и низкого уровня, как, например, получение в режиме реального времени
показаний акселерометра.
Каждый датчик в системе имеет свой идентификатор и тип. По умолчанию SDK предоставляет
набор интерфейсов для работы с наиболее распространёнными типами датчиков, а именно:
· акселерометр (QAccelerometer);
· магнитометр (QMagnetometer);
· компас (QCompass);
· датчик освещённости (QAmbientLight);
· датчик ориентации (QOrientation);
· датчик поворота (QRotation);
· датчик близости (QProximity);
и общие классы:
· QSensorединственный аппаратный сенсор;
· QSensorFilterэффективная возможность для обратных вызовов и асинхронных уведомлений
об обновлениях датчиков;
· QSensorReadingчтение показаний.
В связи с тем, что различные аппаратные платформы предоставляют различный набор датчиков и,
к тому же, некоторые датчики могут быть недоступнывы можете использовать следующие
функции для получения всех доступных типов датчиков на платформе:
QList<QByteArray> types = QSensor::sensorTypes ();
Далее, получить идентификаторы всех датчиков заданного типа возможно используя следующую
консктрукцию:
QList<QByteArray> sensor_ids = QSensor::sensorsForType ( types.last() );
Типичный жизненный цикл датчика включает в себя:
1. Создание экземпляра QSensor, или одного из его подклассов.
QSensor sensor( sensor_ids.last() );
2. Установки в соответствии с требованиями приложения.
3. Запуск процесса получения значений.
sensor.start();
4. Чтение датчика данных, используемых приложением.
QSensorReading *reading = sensor.reading();
qreal x = reading->property("x").value<qreal>();
5. Отказ от получения значений.
sensor.stop();
Пример: получение показаний акселерометра:
QAccelerometer sensor; sensor.start();
QAccelerometerReading sensor_reading = sensor.reading();
qreal x = sensor_reading->x();
sensor.stop();
Подпись на уведомления об изменениях показаний датчика используя стандартные сигналы/слоты
Qt:
MyWidget::MyWidget() {
...
QObject::connect(
sensor, SIGNAL( readingChanged() ),
this, SLOT( myFunction() );
...
}
В некоторых случаях обновления могут приходить слишком часто и будут вызывать снижение
производительности системы. В этом случае более правильным будет использовать производные
класса QSensorFilter, например, QAccelerometerFilter. Для его использования необходимо
наследоваться и реализовывать виртуальный метод filter, в котором необходимо добавить логику
работы в случае обновления датчика.