このページでは

QBluetoothDeviceDiscoveryAgent Class

QBluetoothDeviceDiscoveryAgent クラスは、近くにある Bluetooth デバイスを検出します。詳細...

ヘッダー: #include <QBluetoothDeviceDiscoveryAgent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake: QT += bluetooth
継承元: QObject

パブリック型

enum DiscoveryMethod { NoMethod, ClassicMethod, LowEnergyMethod }
flags DiscoveryMethods
enum Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnsupportedPlatformError, …, UnknownError }

パブリック関数

QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)
QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
virtual ~QBluetoothDeviceDiscoveryAgent()
QList<QBluetoothDeviceInfo> discoveredDevices() const
QBluetoothDeviceDiscoveryAgent::Error error() const
QString errorString() const
bool isActive() const
int lowEnergyDiscoveryTimeout() const
void setLowEnergyDiscoveryTimeout(int timeout)

パブリック・スロット

void start()
void start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)
void stop()

シグナル

void canceled()
void deviceDiscovered(const QBluetoothDeviceInfo &info)
void deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)
(since 6.2) void errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)
void finished()

静的パブリックメンバー

QBluetoothDeviceDiscoveryAgent::DiscoveryMethods supportedDiscoveryMethods()

詳細な説明

近くのBluetoothデバイスを検出するには:

  • QBluetoothDeviceDiscoveryAgentのインスタンスを作成し、
  • deviceDiscovered() またはfinished() シグナルのいずれかに接続し、
  • start() を呼び出します。
voidMyClass::startDeviceDiscovery()
{

    // ディスカバリーエージェントを作成し、そのシグナルに接続する
    QBluetoothDeviceDiscoveryAgent*discoveryAgent = newQBluetoothDeviceDiscoveryAgent(this);
    connect(discoveryAgent,SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
            this,SLOT(deviceDiscovered(QBluetoothDeviceInfo)));

    // 検出を開始
    discoveryAgent->start();

    //...
}

// ローカルスロット内で、検出されたデバイスに関する情報を読み取る
voidMyClass::deviceDiscovered(constQBluetoothDeviceInfo&device)
{
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}

結果を非同期で取得するには、deviceDiscovered() シグナルに接続します。検出されたすべてのデバイスの一覧を取得するには、finished() シグナルの後にdiscoveredDevices() を呼び出します。

このクラスは、ClassicおよびLow Energy Bluetoothデバイスの検出に使用できます。個々のデバイスタイプは、QBluetoothDeviceInfo::coreConfigurations()属性によって判別できます。ほとんどの場合、discoveredDevices()によって返されるリストには両方のタイプのデバイスが含まれます。ただし、すべてのプラットフォームが両方のタイプのデバイスを検出できるわけではありません。 この制限があるプラットフォーム(例えば、iOSはLow Energyディスカバリーのみをサポートしています)では、ディスカバリー処理はサポートされているタイプに検索を限定します。

注: Android 6.0以降、 デバイスを検出するにはACCESS_COARSE_LOCATIONが必要です。

注:Win32バックエンドは 現在、受信信号強度インジケータ(RSSI)やメーカー固有データ、およびディスカバリー後にBluetooth LEデバイスがアドバタイズするその他のデータ更新をサポートしていません。

メンバタイプのドキュメント

enum QBluetoothDeviceDiscoveryAgent::DiscoveryMethod
flags QBluetoothDeviceDiscoveryAgent::DiscoveryMethods

この列挙型は、QBluetoothDeviceDiscoveryAgent が採用するディスカバリ方式の種類を表します。

定数値説明
QBluetoothDeviceDiscoveryAgent::NoMethod0x0検出は不可能です。利用可能な方法はいずれもサポートされていません。
QBluetoothDeviceDiscoveryAgent::ClassicMethod0x01検出プロセスでは、Bluetooth Classic (BaseRate) デバイスを検索します。
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod0x02ディスカバリ プロセスでは、Bluetooth Low Energy デバイスが検索されます。

DiscoveryMethods 型は、QFlags<DiscoveryMethod> の typedef です。DiscoveryMethod 値の OR 組み合わせを格納します。

関連項目: supportedDiscoveryMethods()。

enum QBluetoothDeviceDiscoveryAgent::Error

Bluetoothデバイスの検出中に検出された、考えられるすべてのエラー状態を示します。

定数値説明
QBluetoothDeviceDiscoveryAgent::NoError0エラーは発生していません。
QBluetoothDeviceDiscoveryAgent::PoweredOffError2Bluetooth アダプタの電源がオフになっています。検出を行う前に電源を入れてください。
QBluetoothDeviceDiscoveryAgent::InputOutputError1デバイスへの書き込みまたは読み取り中にエラーが発生しました。
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError3渡されたローカルアダプタのアドレスが、ローカルの Bluetooth デバイスの物理アダプタアドレスと一致しません。
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError (since Qt 5.5)4現在のプラットフォームでは、デバイスの検出が不可能であるか、実装されていません。このエラーは、start() の呼び出しに応じて設定されます。このようなケースの例としては、Bluetooth デバイス検索をまったくサポートしていない iOS 5.0 以前のバージョンが挙げられます。
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod (since Qt 5.8)5要求された検出方法のうち、1 つが現在のプラットフォームでサポートされていません。
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError (since Qt 6.2)6位置情報サービスがオフになっています。位置情報サービスがオフの場合、Bluetooth API を使用することはできません。
QBluetoothDeviceDiscoveryAgent::MissingPermissionsError (since Qt 6.4)7オペレーティングシステムが、ユーザーによって許可されていない権限を要求しています。
QBluetoothDeviceDiscoveryAgent::UnknownError100不明なエラーが発生しました。

メンバ関数のドキュメント

[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)

親としてparent を持つ新しいBluetoothデバイス検出エージェントを構築します。

[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)

parent を使用して、新しい Bluetooth デバイス検出エージェントを生成します。

デバイスの検索にはdeviceAdapter を使用します。deviceAdapter がデフォルトで生成された場合、結果として得られるQBluetoothDeviceDiscoveryAgentオブジェクトは、ローカルのデフォルトBluetoothアダプタを使用します。

deviceAdapter としてローカルアダプタ以外のものが指定された場合、error()はInvalidBluetoothAdapterError に設定されます。したがって、このコンストラクタを使用後は直ちにエラーフラグを確認することを推奨します。

error()も参照してください 。

[virtual noexcept] QBluetoothDeviceDiscoveryAgent::~QBluetoothDeviceDiscoveryAgent()

~QBluetoothDeviceDiscoveryAgent() のデストラクタ

[signal] void QBluetoothDeviceDiscoveryAgent::canceled()

このシグナルは、stop() の呼び出しによってデバイスの検出が中止されたときに発生します。

[signal] void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)

このシグナルは、info で指定されたBluetoothデバイスが検出された際に発せられます。

このシグナルは、最も重要なデバイス情報が収集され次第、直ちに発信されます。ただし、finished() シグナルが発信されるまでは、すでに検出済みのデバイスであっても情報の収集は継続されます。これは特に、信号強度情報(RSSI)やメーカーデータの更新において当てはまります。 ユースケースでメーカーデータやRSSIの継続的な更新が必要な場合は、検出が完了したらdiscoveredDevices()を介してデバイス情報を取得するか、deviceUpdated()シグナルをリッスンすることをお勧めします。

lowEnergyDiscoveryTimeout() が 0 より大きい場合、このシグナルはinfo の属性のうち少なくとも 1 つが変更されたときにのみ発信されます。これは、より正確な情報が利用可能になった時点で更新を受け取りたいという要望を反映したものです。 この動作の例外は、lowEnergyDiscoveryTimeout が0 に設定されている場合です。0 のタイムアウトは、低消費電力(Low Energy)デバイスの出現および消失を長期的に監視したいという意図を表します。この条件下では、前回のシグナル発火以降にinfo が変更されていなくても、deviceDiscovered()シグナルが発火します。

QBluetoothDeviceInfo::rssi() およびlowEnergyDiscoveryTimeout()も参照してください 。

[signal] void QBluetoothDeviceDiscoveryAgent::deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)

このシグナルは、エージェントが `info` で記述されたBluetoothデバイスに関する追加情報を受信した際に発信されます。updatedFields フラグは、どの情報が更新されたかを示します。

ディスカバリ中、signal strength やmanufacturerData などの一部の情報は動的に変化する場合があります。このシグナルは、アプリケーションがこのデータを表示している場合、ディスカバリが完了するまで待つのではなく、データを更新できることを通知するものです。

QBluetoothDeviceInfo::rssi() およびlowEnergyDiscoveryTimeout()も参照してください 。

QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const

検出されたすべてのBluetoothデバイスの一覧を返します。

QBluetoothDeviceDiscoveryAgent::Error QBluetoothDeviceDiscoveryAgent::error() const

最後のエラーを返します。

ディスカバリを再起動すると、それ以前に発生したエラーはすべてクリアされます。

[signal, since 6.2] void QBluetoothDeviceDiscoveryAgent::errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)

このシグナルは、Bluetoothデバイスの検出中にerror が発生した際に発せられます。error パラメータは、発生したエラーの詳細を示します。

この関数はQt 6.2で導入されました。

error() およびerrorString()も参照してください 。

QString QBluetoothDeviceDiscoveryAgent::errorString() const

直近のエラーについて、人間が理解しやすい説明を返します。

error() およびerrorOccurred()も参照してください 。

[signal] void QBluetoothDeviceDiscoveryAgent::finished()

このシグナルは、Bluetoothデバイスの検出が完了したときに発せられます。デバイスの検出がエラーで終了した場合は、このシグナルは発せられません。

bool QBluetoothDeviceDiscoveryAgent::isActive() const

エージェントが現在Bluetoothデバイスを検出している場合はtrueを返し、そうでない場合はfalseを返します。

int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const

Bluetooth Low Energy デバイスの検索に適用されるタイムアウトをミリ秒単位で返します。-1 という値は、プラットフォームがこのプロパティをサポートしておらず、デバイス検索のタイムアウトを調整できないことを意味します。0 という戻り値は、検索が終了しないことを意味し、stop() を使用して手動で停止する必要があります。

setLowEnergyDiscoveryTimeout()も参照してください 。

void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)

Bluetooth Low Energyデバイスの検索にかかる最大時間を、timeout (ミリ秒単位)に設定します。timeout が0 の場合、stop()が呼び出されるまで検出処理が実行されます。

これは、Bluetooth Low Energy デバイスの検出プロセスが、ほとんどの場合、終了時期が定まっていないという事実を反映しています。プラットフォームは、検索が手動で停止されるまで、引き続きデバイスを探し続けます。このタイムアウトにより、timeout ミリ秒経過後に検索が中止されることが保証されます。もちろん、stop() を呼び出すことで、手動で検出を中止することも可能です。

新しいタイムアウト値は、デバイス検索が再開始されるまで有効になりません。また、このタイムアウトは従来のBluetoothデバイス検索には影響しません。プラットフォームによっては、従来の検索により、timeout を超える時間がディスカバリープロセス全体に追加される場合があります。

信頼性の高いBluetooth Low Energyのディスカバリを行うには、少なくとも40000ミリ秒を設定してください。

lowEnergyDiscoveryTimeout()も参照してください 。

[slot] void QBluetoothDeviceDiscoveryAgent::start()

Bluetoothデバイスの検出がまだ開始されていない場合、検出を開始します。

各デバイスが検出されるたびに、deviceDiscovered() シグナルが発火します。デバイスの検出が完了すると、finished() シグナルが一度発火します。検出には、プラットフォームでサポートされている検出方法のうち、可能な限り多くの方法が使用されます。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        bluetoothDeviceDiscoveryAgent, qOverload<>(&QBluetoothDeviceDiscoveryAgent::start));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent]() { receiver->start(); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

supportedDiscoveryMethods()も参照してください 。

[slot] void QBluetoothDeviceDiscoveryAgent::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)

Bluetoothデバイスの検出がまだ開始されておらず、指定されたmethods がサポートされている場合、Bluetoothデバイスの検出を開始します。discoverymethods は、デバイス検索の範囲を制限します。たとえば、対象のサービスまたはデバイスがBluetooth Low Energyデバイスである場合、この関数を使用して検索をBluetooth Low Energyデバイスに限定することで、検出時間を大幅に短縮できます。

注: methods は 検出の種類を決定するのみで、検索結果のフィルタリングを意味するものではありません。たとえば、methods がLowEnergyMethod のみに設定されている場合でも、検索結果に従来のBluetoothデバイスが含まれる可能性があります。これは、以前にキャッシュされた検索結果が検索結果に組み込まれていることが原因である可能性があります。

注:一部の プラットフォーム(例:Windows)では、現在アドバタイズしていないデバイスについてもキャッシュされた結果が提供される場合があります。一方、他のプラットフォーム(iOS など)では、現在アドバタイズしているデバイスに関する情報のみが提供されます。 最初の検出時に受信したデバイスの UUID(または Bluetooth アドレス)を保存しておき、後でそれを使用して直接接続を確立することができます(QBluetoothDeviceInfo を参照)。こうすることで、アプリケーションは後のデバイス検出フェーズを省略できます。Bluetooth アドレスを使用するには、リモートデバイスの Bluetooth アドレスが変更されないことが条件となります。

注:この スロットは オーバーロードされています。このスロットに接続するには:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        bluetoothDeviceDiscoveryAgent, qOverload(&QBluetoothDeviceDiscoveryAgent::start));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent](QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods) { receiver->start(methods); });
その他の例や手法については、「オーバーロードされたスロットへの接続」を参照してください。

[slot] void QBluetoothDeviceDiscoveryAgent::stop()

Bluetoothデバイスの検出を停止します。デバイスの検出がキャンセルされると、cancel()シグナルが発信されます。cancelシグナルを受信する前に、start()が呼び出される場合があります。start()が呼び出されると、以前の検出からのcancelシグナルは破棄されます。

[static] QBluetoothDeviceDiscoveryAgent::DiscoveryMethods QBluetoothDeviceDiscoveryAgent::supportedDiscoveryMethods()

この関数は、現在のプラットフォームでサポートされている検出メソッドを返します。これを使用して、デバイス検出の範囲を絞り込むことができます。

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