이 페이지에서

Qt Sensors C++ 개요

센서 유형

장치에는 다양한 종류의 센서가 있을 수 있습니다. Qt Sensors API에서 지원하는 모든 유형이 사용 가능한 것은 아닙니다. 또한 Qt Sensors API에 정의되어 있지 않은 유형도 있을 수 있습니다. 장치에서 사용 가능한 센서 유형은 QSensor::sensorTypes() 함수를 사용하여 확인할 수 있습니다.

내장 센서 유형 목록은 아래의 ‘센서 클래스’ 섹션을 참조하십시오.

일반적인 규칙

별도로 명시되지 않는 한, Qt Sensors 는 오른손 데카르트 좌표계를 사용합니다.

오른손 데카르트 좌표계의 +x, +y, +z 축을 갖는 장치

6개 방향 모두에서 측정이 가능하도록 음수 값이 사용됩니다.

6개 방향 모두로 뻗어 있는 양의 및 음의 x, y, z축을 가진 장치

축을 중심으로 한 회전이 사용될 경우, 해당 회전은 오른손 회전으로 표기해야 합니다.

x, y, z 축을 중심으로 오른쪽으로 회전하는 것을 나타내는 곡선 화살표가 있는 장치

일반적으로 센서 데이터는 ‘ QScreen::nativeOrientation ’를 기준으로 방향이 지정되며, 이는 기기를 자연스러운 방향(보통 기기 로고가 정상적으로 보이는 방향)으로 잡았을 때 기기의 상단을 가리킵니다. 값을 화면에 표시해야 하는 경우, 사용자 인터페이스 방향과 일치하도록 값을 변환해야 할 수 있습니다. 센서는 데이터를 UI 방향에 맞춰 정의할 수 있습니다. 이 내용은 해당 센서의 설명서에 명시되어 있습니다.

기기의 측면, 전면, 상단, 하단 모습을 보여주며, 기기의 상단 및 하단 가장자리에 라벨이 표시되어 있습니다.

센서 사용

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의 속성 시스템 덕분에 여전히 센서 데이터에 접근할 수 있습니다. 이를 위해서는 다음 3가지 정보를 알아야 합니다:

  • 센서 유형.
  • 속성 이름 또는 인덱스.
  • 속성 유형 또는 이와 호환되는 유형.

예를 들어, 다음은 가속도계의 속성에 접근하는 방법의 예시입니다. 이 코드는 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>();

이 모든 정보는 런타임에서도 확인할 수 있습니다.

런타임 시 센서 탐지 및 속성 읽기

때로는 개발 시점에 사용 가능한 센서를 알 수 없는 경우가 있습니다. 아래 예시와 같이 어떤 센서를 사용할 수 있는지 확인할 수 있습니다:

QList<QSensor*> mySensorList;
for (const QByteArray&type: QSensor::sensorTypes()) {
    qDebug() << "Found a sensor type:" << type;
   for (const QByteArray&식별자: QSensor::sensorsForType(type)) {
        qDebug() << "    " << "Found a sensor of that type:" << identifier;
        QSensor* sensor = new QSensor(type, this);
        sensor->setIdentifier(identifier);
        mySensorList.append(sensor);
    }
}

또한 아래와 같이 해당 센서의 측정값 세부 정보를 확인할 수 있습니다:

for (QSensor* sensor : mySensorList) {
    const int firstProperty = QSensorReading::staticMetaObject.propertyOffset();
    // start()가 아직 호출되지 않은 경우, 먼저 백엔드에 연결합니다
    if (!sensor->connectToBackend())
        continue;
    qDebug() << "Sensor" << sensor->identifier() << "reading properties:";
    QSensorReading*reading = sensor->reading();
    if (reading) {
        const QMetaObject*mo = reading->metaObject();
        for (int i = firstProperty; i < mo->propertyCount();++i) {
            QByteArray name = mo->property(i).name();
            qDebug() << "    " << name << reading->property(name).toByteArray();
        }
    }
}

프론트엔드, 백엔드

Qt Sensors API에는 애플리케이션 개발자가 사용하는 프런트엔드와, 장치 구현자가 하드웨어에 접근하기 위해 코드를 작성하는 백엔드가 있습니다. 애플리케이션 개발자라면 백엔드에 직접 접근할 필요는 없지만, 백엔드가 어떻게 작동하는지 이해하는 것은 유용할 수 있습니다.

애플리케이션에서 전송된 명령은 QSensor 를 거쳐 디바이스 플러그인으로 전달됩니다. 데이터는 QSensorReading 클래스를 통해 반환됩니다.

애플리케이션, QSensor, QSensorBackend, QSensorReading 및 디바이스 플러그인 간의 데이터 흐름

백엔드에 대한 자세한 내용은 Qt Sensors Backend에서 확인할 수 있습니다.

주요 클래스

Qt Sensors API를 구성하는 주요 클래스들입니다.

QSensor

단일 하드웨어 센서를 나타냅니다

QSensorFilter

센서 변경 사항에 대한 비동기 알림을 위한 효율적인 콜백 기능

QSensorReading

센서에서 수집된 측정값을 보관합니다

판독 클래스

센서 데이터에 접근하는 가장 좋은 방법은 다음 클래스 중 하나를 이용하는 것입니다.

QAccelerometerReading

X, Y, Z 축을 따라 측정된 선형 가속도 값을 반환합니다

QAmbientLightReading

주변 광 센서의 측정값 하나를 나타냅니다

QAmbientTemperatureReading

주변 온도의 측정값을 저장합니다

QCompassReading

나침반에서 얻은 측정값 하나를 나타냅니다

QGyroscopeReading

자이로스코프 센서의 측정값 하나를 나타냅니다

QHumidityReading

습도 센서의 측정값을 저장합니다

QLightReading

광 센서의 측정값 하나를 나타냅니다.

QMagnetometerReading

자력계에서 측정된 값 1개를 나타냅니다

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를 둘러싼 편의 래퍼

© 2026 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.