Qt Sensors C++ 概述

传感器类型

设备上可能有多种类型的传感器。并非Qt Sensors API 支持的所有类型都可用。也可能存在Qt Sensors API 未定义的可用类型。使用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 的属性系统,您仍然可以访问传感器数据。要做到这一点,您需要知道以下三条信息:

  • 传感器类型。
  • 属性名称或索引。
  • 属性类型或类似类型。

例如,下面是一个如何访问加速度计属性的示例。这段代码不需要任何编译时链接到QAccelerometerQAccelerometerReading

// 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>();

您也可以在运行时发现所有这些信息。

在运行时发现传感器并读取属性

有时,开发时可能不知道哪些传感器可用。如下图所示,我们可以找出可用的传感器:

QList<QSensor*>mySensorList;for(constQByteArray&typeQSensor::sensorTypes()) {    qDebug() << "Found a sensor type:" << type;
   (constQByteArray&identifierQSensor::sensorsForType(type)) {        qDebug() << "    " << "Found a sensor of that type:" << identifier;
        QSensor* 传感器= newQSensor(type, this); sensor->setIdentifier(identifier); mySensorList.append(sensor); } }

此外,还可以发现这些传感器的读数详情,如下图所示:

for(QSensor* 传感器 : mySensorList) {const intfirstProperty=QSensorReadingif(!sensor->connectToBackend()) continue    qDebug() << "Sensor" << sensor->identifier() << "reading properties:";
    QSensorReading*reading =  sensor->reading();if(reading) {constQMetaObject*mo =  reading->metaObject();for(inti=firstProperty; i<  mo->propertyCount();++i) { QByteArrayname=  mo->property(i).name();            qDebug() << "    " << name << reading->property(name).toByteArray();
        } }

前端、后端

Qt Sensors API 有前端和后端,前端供应用程序开发人员使用,后端供设备实施人员编写代码以访问其硬件。作为应用程序开发人员,您不需要访问后端,但了解后端如何工作可能会有所帮助。

应用程序的命令通过QSensor 发送,然后下传到设备插件。数据通过QSensorReading 类返回。

有关后端的更多信息,请参阅Qt Sensors Backend

主类

构成Qt Sensors API 的主要类。

QSensor

代表单个硬件传感器

QSensorFilter

用于异步通知传感器变化的高效回调工具

QSensorReading

保存传感器读数

读数类

访问传感器数据的最佳方式是通过这些类之一。

QAccelerometerReading

报告沿 X、Y 和 Z 轴的线性加速度

QAmbientLightReading

代表环境光传感器的一个读数

QAmbientTemperatureReading

保存环境温度读数

QCompassReading

代表指南针的一个读数

QGyroscopeReading

代表陀螺仪传感器的一个读数

QHumidityReading

保存湿度传感器的读数

QLightReading

代表光传感器的一个读数

QMagnetometerReading

代表磁力计的一个读数

QOrientationReading

代表方向传感器的一个读数

QPressureReading

保持压力传感器的读数

QProximityReading

代表接近传感器的一个读数

QRotationReading

代表旋转传感器的一个读数

QTiltReading

保持倾斜传感器的读数

传感器类别

这些类提供了方便的封装器,减少了铸造的需要。这些类中的每个类都代表Qt Sensors API 所知道的一种传感器类型。请注意,运行时可能会提供其他类型。更多信息请参阅传感器类型

QAccelerometer

QSensor 的便利封装

QAmbientLightSensor

QSensor 的便利封装

QAmbientTemperatureSensor

QSensor 方便封装器

QCompass

QSensor 便捷封装器

QGyroscope

QSensor 便捷封装器

QHumiditySensor

QSensor 便捷包装器

QLightSensor

QSensor 便捷包装器

QMagnetometer

QSensor 便捷包装器

QOrientationSensor

QSensor 便捷包装器

QPressureSensor

QSensor 便捷包装器

QProximitySensor

QSensor 便捷包装器

QRotationSensor

QSensor 便捷包装器

QTiltSensor

QSensor 便捷封装器

过滤器类

与传感器类一样,这些类提供了方便的封装器,减少了铸造的需要。

QAccelerometerFilter

QSensorFilter 的便利封装器

QAmbientLightFilter

QSensorFilter 的便利封装器

QAmbientTemperatureFilter

QSensorFilter 的便利封装器

QCompassFilter

QSensorFilter 便捷封装器

QGyroscopeFilter

QSensorFilter 便捷封装器

QHumidityFilter

QSensorFilter 便捷封装器

QLightFilter

QSensorFilter 便捷封装器

QMagnetometerFilter

QSensorFilter 便捷封装器

QOrientationFilter

QSensorFilter 便捷封装器

QPressureFilter

QSensorFilter 便捷封装器

QProximityFilter

QSensorFilter 便捷封装器

QRotationFilter

QSensorFilter 便捷封装器

QTiltFilter

QSensorFilter 的便利封装器

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.