Qt Sensors C++ 개요
센서 유형
디바이스에는 다양한 유형의 센서가 있을 수 있습니다. Qt Sensors API가 지원하는 모든 유형을 사용할 수 있는 것은 아닙니다. Qt Sensors API에 정의되지 않은 유형도 사용할 수 있습니다. 장치에서 사용 가능한 센서 유형은 QSensor::sensorTypes() 함수를 사용하여 확인할 수 있습니다.
내장된 센서 유형 목록은 아래의 센서 클래스 섹션을 참조하세요.
일반적인 규칙
별도로 지정하지 않는 한 Qt Sensors 은 우측 직교 좌표계를 사용합니다.
6방향 모두에서 측정할 수 있도록 음수 값이 사용됩니다.
축을 중심으로 회전이 사용되는 경우, 회전은 오른손 회전으로 표현합니다.
일반적으로 센서 데이터의 방향은 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의 속성 시스템 덕분에 여전히 센서 데이터에 액세스할 수 있습니다. 이를 위해서는 세 가지 정보를 알아야 합니다:
- 센서 유형.
- 속성 이름 또는 인덱스.
- 속성 유형 또는 이와 유사한 유형.
예를 들어 다음은 가속도계의 프로퍼티에 액세스하는 방법의 예입니다. 이 코드에는 컴파일 시 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 &identifier: 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()가 아직 호출되지 않은 경우 백엔드에 먼저 연결(!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 클래스를 통해 반환됩니다.
백엔드에 대한 자세한 내용은 Qt Sensors 백엔드에서 확인할 수 있습니다.
주요 클래스
Qt Sensors API를 구성하는 주요 클래스입니다.
단일 하드웨어 센서를 나타냅니다. | |
센서 변경에 대한 비동기 알림을 위한 효율적인 콜백 기능 | |
센서의 판독값을 보유합니다. |
읽기 클래스
센서 데이터에 액세스하는 가장 좋은 방법은 이러한 클래스 중 하나를 이용하는 것입니다.
X, Y 및 Z 축을 따라 선형 가속도에 대한 보고서 | |
주변 광 센서의 판독값 하나를 나타냅니다. | |
주변 온도의 판독값을 보유합니다. | |
나침반의 판독값 하나를 나타냅니다. | |
자이로스코프 센서의 판독값을 하나 표시합니다. | |
습도 센서의 판독값을 보유합니다. | |
조도 센서의 판독값 하나를 나타냅니다. | |
자력계의 판독값 하나를 나타냅니다. | |
방향 센서의 판독값 하나를 나타냅니다. | |
압력 센서의 판독값을 보유합니다. | |
근접 센서의 판독값 하나를 나타냅니다. | |
회전 센서의 판독값 하나를 나타냅니다. | |
기울기 센서의 판독값을 보유합니다. |
센서 클래스
이러한 클래스는 캐스팅의 필요성을 줄여주는 편리한 래퍼를 제공합니다. 이러한 각 클래스는 Qt Sensors API가 알고 있는 센서 유형을 나타냅니다. 런타임에 추가 유형이 제공될 수 있다는 점에 유의하세요. 자세한 내용은 센서 유형을 참조하세요.
QSensor를 둘러싼 편의 래퍼 | |
QSensor를 둘러싼 편의 래퍼 | |
QSensor를 둘러싼 편의 래퍼 | |
QSensor를 둘러싼 편의 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 | |
QSensor를 둘러싼 편의성 래퍼 |
필터 클래스
센서 클래스와 마찬가지로 캐스팅의 필요성을 줄여주는 편의 래퍼를 제공합니다.
Q센서필터를 둘러싼 편의 래퍼 | |
QSensorFilter를 둘러싼 편의 래퍼 | |
Q센서필터를 감싸는 편의 래퍼 | |
Q센서필터에 대한 편의성 래퍼 | |
Q센서필터에 대한 편의성 래퍼 | |
Q센서필터에 대한 편의성 래퍼 | |
Q센서필터에 대한 편의성 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 | |
Q센서 필터를 둘러싼 편의 래퍼 |
© 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.