Обзор Qt Sensors C++
Типы датчиков
На устройстве может быть много типов датчиков. Возможно, не все типы, поддерживаемые API Qt Sensors, доступны. Также могут быть доступны типы, не определенные в API Qt Sensors. Типы датчиков, доступные на устройстве, находятся с помощью функции QSensor::sensorTypes().
Список встроенных типов датчиков см. в разделе Классы датчиков ниже.
Общие соглашения
Если не указано иное, Qt Sensors использует декартову систему координат с правой ориентацией.
Для возможности измерений во всех 6 направлениях используются отрицательные значения.
При использовании вращения вокруг оси вращение должно быть выражено как вращение по правилу правой руки.
В общем случае данные датчика ориентированы относительно QScreen::nativeOrientation, то есть к верху устройства, когда устройство удерживается в своей естественной ориентации (обычно, когда логотип устройства отображается правильно). Если значения должны быть отображены на экране, значения могут потребовать преобразования, чтобы они соответствовали ориентации пользовательского интерфейса. Датчик может определить свои данные как ориентированные на пользовательский интерфейс. Это будет отмечено в документации к датчику.
Использование датчика
Жизненный цикл QSensor обычно следующий:
- Создайте экземпляр QSensor или одного из его подклассов в стеке или куче.
- Произведите необходимые настройки для приложения.
- Начните получение значений.
- Данные датчика используются приложением.
- Прекратите получение значений.
Вот пример создания датчика в куче и в стеке.
// On the heap (deleted when this object is deleted) QAccelerometer *sensor = new QAccelerometer(this); // On the stack (deleted when the current scope ends) QOrientationSensor orient_sensor;
Получение данных датчика общим способом
Предпочтительный способ обработки данных датчика — через Классы для чтения. Однако иногда это может быть невозможно. Например, вы можете развертывать приложение на устройстве с новым типом датчика, но заголовок C++ для класса чтения недоступен.
Благодаря системе свойств Qt вы по-прежнему можете получить доступ к данным датчика. Для этого вам нужно знать три вещи:
- Тип датчика.
- Имя или индекс свойства.
- Тип свойства или сопоставимый тип.
Например, вот пример того, как получить доступ к свойству акселерометра. Этот код не требует никаких ссылок на время компиляции к QAccelerometer или QAccelerometerReading.
// start the sensor
QSensor sensor("QAccelerometer");
sensor.start();
// later
QSensorReading *reading = sensor.reading();
qreal x = reading->property("x").value<qreal>();
qreal y = reading->value(1).value<qreal>();
Вы также можете обнаружить всю эту информацию во время выполнения. Пример sensor_explorer показывает информацию о доступных датчиках.
Фронтенд, бэкенд
API Qt Sensors имеет фронтенд для использования разработчиками приложений и бэкенд, где разработчики устройств пишут код для доступа к своему оборудованию. Как разработчик приложения, вам не нужно обращаться к бэкенду, хотя это может быть полезно для понимания его работы.
Команды от приложения передаются через QSensor, а затем к плагину устройства. Данные возвращаются через класс QSensorReading.
Дополнительную информацию о бэкенде можно найти в Qt Sensors Backend.
Основные классы
Основные классы, составляющие API Qt Sensors.
Представляет собой один физический датчик |
|
Эффективный механизм обратного вызова для асинхронных уведомлений о изменениях датчика |
|
Содержит показания с датчика |
Классы для чтения
Лучший способ доступа к данным датчика — через один из этих классов.
Сообщает об ускорении вдоль осей X, Y и Z |
|
Содержит показания с датчика высотомера |
|
Представляет одно измерение датчика освещенности |
|
Содержит показания окружающей температуры |
|
Представляет одно измерение компаса |
|
Содержит расстояние в см от датчика приближения |
|
Представляет одно измерение датчика гироскопа |
|
Содержит показания с датчика футляра |
|
Содержит показания с датчика влажности |
|
Содержит показания с ИК-датчика приближения |
|
Содержит показания с датчика крышки |
|
Представляет одно измерение датчика света |
|
Представляет одно измерение магнитометра |
|
Представляет одно измерение датчика ориентации |
|
Содержит показания с датчика давления |
|
Представляет одно измерение датчика приближения |
|
Представляет одно измерение датчика вращения |
|
Представляет одно измерение датчика касания |
|
Содержит показания с датчика наклона |
Классы датчиков
Эти классы предоставляют обёртки, которые уменьшают необходимость в приведении типов. Каждый из этих классов представляет тип датчика, о котором знает API Qt Sensors. Обратите внимание, что дополнительные типы могут быть доступны во время выполнения. Дополнительную информацию см. в разделе Типы датчиков.
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
|
Удобная обёртка вокруг QSensor |
Классы фильтров
Как и классы датчиков, они предоставляют удобные обёртки, уменьшая необходимость в приведении типов.
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
|
Удобная обёртка вокруг QSensorFilter |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtsensors-cpp.html