このページでは

Qt Sensors C++の概要

センサーの種類

デバイスには、さまざまな種類のセンサーが搭載されている場合があります。Qt Sensors APIがサポートするすべての種類が利用可能とは限りません。また、Qt Sensors APIで定義されていない種類が利用可能な場合もあります。デバイスで利用可能なセンサーの種類は、QSensor::sensorTypes()関数を使用して確認できます。

組み込みのセンサータイプのリストについては、以下の「センサークラス」のセクションを参照してください。

一般的な規約

特に指定がない限り、Qt Sensors では右利きデカルト座標系が使用されます。

右利きデカルト座標系の+x軸、+y軸、および+z軸を持つ装置

6方向すべてでの測定を可能にするため、負の値が使用されます。

x、y、zの各軸が正と負の両方向に延び、全6方向に広がる装置

軸周りの回転が用いられる場合、その回転は右利き回転として表さなければならない。

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;

汎用的な方法でセンサーデータにアクセスする

センサーデータの処理には、Readingクラスを使用するのが推奨されます。ただし、それが不可能な場合もあります。たとえば、新しいセンサータイプを搭載したデバイスにアプリケーションをデプロイする場合でも、その読み取りクラスを記述した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(constQByteArray&type: QSensor::sensorTypes()) {
    qDebug() << "Found a sensor type:" << type;
   for(constQByteArray&identifier: QSensor::sensorsForType(type)) {
        qDebug() << "    " << "Found a sensor of that type:" << identifier;
        QSensor*sensor= newQSensor(type, this);
        sensor->setIdentifier(identifier);
        mySensorList.append(sensor);
    }
}

さらに、以下に示すように、これらのセンサーの測定値の詳細を取得することも可能です:

for(QSensor*sensor : mySensorList) {
    const intfirstProperty=QSensorReading::staticMetaObject.propertyOffset();
    // start() がまだ呼び出されていない場合に備えて、まずバックエンドに接続する
    if(!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) {
            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

周囲光センサーからの1回の測定値を表します

QAmbientTemperatureReading

周囲温度の測定値を保持します

QCompassReading

コンパスからの1回の測定値を表します

QGyroscopeReading

ジャイロセンサーからの1回の測定値を表します

QHumidityReading

湿度センサーからの測定値を保持します

QLightReading

光センサーからの1回の測定値を表します

QMagnetometerReading

磁力計からの測定値1つを表します

QOrientationReading

姿勢センサーからの1回の測定値を表します

QPressureReading

気圧センサーからの測定値を保持します

QProximityReading

近接センサーからの1回の測定値を表します

QRotationReading

回転センサーからの1回の測定値を表します

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.