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 のプロパティシステムのおかげで、センサーデータにアクセスすることができます。そのためには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(const &type::sensorTypes()) { センサーの種類を指定する。 qDebug() << "Found a sensor type:" << type; for(constQByteArray&identifier: QSensor::sensorsForType(タイプ)) { { { (const &identifier ::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=::staticMetaObject 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) { name = mo->property(i). QByteArrayname= mo->property(i).name(); qDebug() << " " << name << reading->property(name).toByteArray(); } }
フロントエンド、バックエンド
Qt Sensors APIには、アプリケーション開発者が使用するフロントエンドと、デバイス実装者がハードウェアにアクセスするためのコードを記述するバックエンドがあります。アプリケーション開発者としてバックエンドにアクセスする必要はありませんが、バックエンドがどのように動作するかを理解しておくと便利でしょう。
アプリケーションからのコマンドはQSensor 、デバイス・プラグインに送られます。データはQSensorReading クラスを通して戻ってきます。
バックエンドの詳細については、Qt Sensors Backendを参照してください。
メインクラス
Qt Sensors API を構成する主要なクラスです。
単一のハードウェアセンサーを表す | |
センサーの変更を非同期で通知するための効率的なコールバック機能 | |
センサーからの読み取り値を保持 |
読み取りクラス
センサーデータにアクセスする最良の方法は、これらのクラスのいずれかを経由することです。
X軸、Y軸、Z軸に沿った直線加速度のレポート | |
環境光センサーからの1つの読み取り値を表す | |
周囲温度の読み取り値を保持 | |
コンパスからの1つの読み取り値を表す | |
ジャイロセンサからの読み取り値1つ | |
湿度センサーの読み取り値を保持 | |
光センサーからの読み取り値1つ | |
地磁気センサーからの読み取り値1つ | |
方位センサーからの読み取り値1つ | |
圧力センサーからの読み取り値を保持 | |
近接センサーからの読み取り値1つを表します。 | |
回転センサーからの読み取り値1つ | |
傾斜センサーからの読み取り値を保持 |
センサークラス
これらのクラスは、キャストの必要性を減らす便利なラッパーを提供します。これらのクラスはそれぞれ、Qt Sensors API が知っているセンサータイプを表します。実行時に追加の型が利用可能になる可能性があることに注意してください。詳細はセンサの種類を参照してください.
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周りのコンビニエンス・ラッパー |
© 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.