Qt Bluetooth

Bluetooth API は、Bluetooth 対応デバイス間の接続を提供します。

現在、このAPIは以下のプラットフォームでサポートされています:

APIの特徴アンドロイドiOSLinux(BlueZ 5.x)macOSWindows
クラシックBluetoothxxxx
ブルートゥースLEセントラルxxxxx
Bluetooth LE 周辺機器xxxx

概要

Bluetoothは短距離(100メートル以下)の無線技術である。データ転送速度は2.1Mbpsで、機器間のデータ転送に適している。Bluetooth接続は、デバイスのスキャン、デバイス情報の収集、デバイス間のデータ交換といった基本的なデバイス管理に基づいています。

Qt Bluetooth は、クライアント/セントラル・ロールのユースケース向けにBluetooth Low Energy開発をサポートしています。詳細はBluetooth Low Energyの概要のセクションを参照してください。

モジュールの使用

Qt モジュールの C++ API を使用するには、モジュール・ライブラリを直接リンクするか、他の依存関係を介してリンクする必要があります。CMakeや qmakeなど、いくつかのビルドツールはこのための専用サポートを持っています。

CMake でのビルド

find_package() コマンドを使って、Qt6 パッケージの中から必要なモジュール・コンポーネントを探します:

find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)

詳細については、CMakeによるビルドの概要を参照してください。

qmakeでのビルド

モジュールをqmakeでビルドするように設定するには、プロジェクトの.proファイルにQT 変数の値としてモジュールを追加します:

QT += bluetooth

パーミッション

Qt 6.6 から、Qt Bluetooth モジュールはBluetooth のパーミッションを処理するために新しいQPermission API を使用します。つまり、Qt自身はこれらのパーミッションの問い合わせをしなくなったので、クライアントアプリケーションから直接行う必要があります。

新しいQPermission API をアプリケーションに統合する方法の例については、Application Permissions のページを参照してください。

ビルドQt Bluetooth

モジュールはすべての Qt プラットフォーム用にビルドできますが、モジュールはすべてのプラットフォームに移植されているわけではありません。サポートされていないプラットフォームでは、ダミーバックエンドが採用されており、プラットフォームがサポートされていない場合に自動的に選択されます。ダミーバックエンドは適切なエラーメッセージと値を報告し、実行時に現在のプラットフォームがサポートされていないことを検出することができます。Linux では、BlueZ 開発用ヘッダがビルド時に見つからなかった場合や、Qt がQt D-Bus をサポートせずにビルドされた場合にも、ダミーバックエンドが選択されます。

ダミーバックエンドの使用は、ビルド中と実行中に適切な警告によって強調表示されます。

Linux 特有

Qt 6.5 以降、Linux ペリフェラルサポートには 2 つのバックエンドがあります:BlueZ DBus と Bluetooth Kernel API です。DBus バックエンドは Qt 6.7 以降のデフォルトのバックエンドです。

BlueZ DBus は新しい BlueZ スタックで、おそらく古いカーネル API の最終的な後継となるでしょう。機能面では少し制限されていますが、一般的な使い方では問題にならないでしょう。DBusバックエンドを使うことの特筆すべき利点は、ユーザー・プロセスがCAP_NET_ADMIN能力を持つ必要がなくなることです(例えば、root ユーザーとして実行するなど)。

DBusバックエンドには、BlueZバージョン5.56以上と、必要なDBus APIが必要です。これらの要件が満たされない場合、Qt は自動的に Bluetooth カーネル API バックエンドにフォールバックします。

QT_BLUETOOTH_USE_KERNEL_PERIPHERAL環境変数を設定することで、手動で古いカーネルバックエンドを選択することもできます。

macOS固有

macOS の Bluetooth API は、Qt ではQGuiApplication に依存する特定のタイプのイベントディスパッチャを必要とします。 しかし、環境変数QT_EVENT_DISPATCHER_CORE_FOUNDATION=1 を設定することで、この問題を回避することができます。

Classic Bluetooth を使用しないアプリケーションでは、CoreBluetooth (Bluetooth LE) がQApplicationQGuiApplication を必要としないため、QtBluetooth のサブセットが利用できます。

記事とガイド

リファレンス

ログ・カテゴリー

QtBluetooth モジュールは以下のlogging categories をエクスポートします:

ロギングカテゴリー説明
qt.bluetoothのクロスプラットフォームのコードパスのロギングを有効にする。QtBluetooth
qt.bluetooth.androidAndroid実装のロギングを有効にする
qt.bluetooth.bluezBLuez/Linux 実装のロギングを有効にする
qt.bluetooth.iosiOS実装のロギングを有効にします
qt.bluetooth.osxmacOS実装のロギングを有効にする
qt.bluetooth.windowsWindows実装のロギングを有効にする

ロギングのカテゴリは、QtBluetooth に対する追加の警告およびデバッグ出力を有効にします。ロギングの詳細については、QLoggingCategory を参照してください。QtBluetooth のロギングをすべて有効にする簡単な方法は、main() 関数に次の行を追加することです:

QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));

モジュールの進化

Qt Bluetooth の変更点には、Qt 6 シリーズの Qt で行われたモジュール API と機能の重要な変更が記載されています。

ライセンスと帰属

Qt Bluetooth は、The Qt Company の商用ライセンスで入手できます。さらに、GNU Lesser General Public License, version 3 またはGNU General Public License, version 2 の下でも利用可能です。詳細はQt ライセンスを参照してください。

Linux では、Qt Bluetooth は、公式の Linux bluetooth プロトコルスタック BlueZ と統合するために、別の実行ファイルsdpscanner を使用します。BlueZはGNU General Public License, version 2の下で利用可能です。

BlueZ

GNU General Public License v2.0のみ (これはユーザーコードにGPLを強制するものではありません。詳細は詳細をご覧ください)。

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