Sur cette page

QBluetoothDeviceDiscoveryAgent Class

La classe `QBluetoothDeviceDiscoveryAgent` permet de détecter les périphériques Bluetooth à proximité. En savoir plus...

En-tête : #include <QBluetoothDeviceDiscoveryAgent>
CMake : find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake : QT += bluetooth
Hérite de : QObject

Types publics

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

Fonctions publiques

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)

Emplacements publics

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

Signaux

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()

Membres publics statiques

QBluetoothDeviceDiscoveryAgent::DiscoveryMethods supportedDiscoveryMethods()

Description détaillée

Pour détecter les appareils Bluetooth à proximité :

  • créez une instance de QBluetoothDeviceDiscoveryAgent,
  • connectez-vous aux signaux ` deviceDiscovered()` ou ` finished()`,
  • puis appeler la méthode start().
void MyClass::startDeviceDiscovery()
{

    // Créer un agent de découverte et s'abonner à ses signaux
    QBluetoothDeviceDiscoveryAgent*discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
            this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));

    // Lancer une détection
    discoveryAgent->start();

    //...
}

// Dans votre slot local, lisez les informations concernant les périphériques détectés
void MyClass::deviceDiscovered(const QBluetoothDeviceInfo&device)
{
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}

Pour récupérer les résultats de manière asynchrone, connectez-vous au signal « deviceDiscovered() ». Pour obtenir la liste de tous les périphériques détectés, appelez « discoveredDevices() » après le signal « finished() ».

Cette classe permet de détecter des périphériques Bluetooth Classic et Low Energy. Le type de chaque périphérique peut être déterminé via l’attribut QBluetoothDeviceInfo::coreConfigurations(). Dans la plupart des cas, la liste renvoyée par discoveredDevices() contient les deux types de périphériques. Cependant, toutes les plateformes ne sont pas capables de détecter ces deux types de périphériques. Sur les plateformes présentant cette limitation (par exemple, iOS ne prend en charge que la détection Low Energy), le processus de détection limitera la recherche au type pris en charge.

Remarque : depuis Android 6.0, la détection des appareils nécessite l'autorisation ACCESS_COARSE_LOCATION.

Remarque : le backend Win32 ne prend actuellement pas en charge l’indicateur de puissance du signal reçu (RSSI), ni les données spécifiques au fabricant, ni les autres mises à jour de données diffusées par les périphériques Bluetooth LE après la découverte.

Documentation sur les types de membres

enum QBluetoothDeviceDiscoveryAgent::DiscoveryMethod
flags QBluetoothDeviceDiscoveryAgent::DiscoveryMethods

Cette énumération décrit le type de méthode de découverte utilisée par l'QBluetoothDeviceDiscoveryAgent.

ConstanteValeurDescription
QBluetoothDeviceDiscoveryAgent::NoMethod0x0La détection n'est pas possible. Aucune des méthodes disponibles n'est prise en charge.
QBluetoothDeviceDiscoveryAgent::ClassicMethod0x01Le processus de détection recherche des appareils Bluetooth Classic (BaseRate).
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod0x02Le processus de découverte recherche des périphériques Bluetooth Low Energy.

Le type DiscoveryMethods est une définition de type pour QFlags<DiscoveryMethod>. Il stocke une combinaison OU de valeurs DiscoveryMethod.

Voir également supportedDiscoveryMethods().

enum QBluetoothDeviceDiscoveryAgent::Error

Indique toutes les conditions d'erreur possibles détectées lors de la recherche d'appareils Bluetooth.

ConstanteValeurDescription
QBluetoothDeviceDiscoveryAgent::NoError0Aucune erreur ne s'est produite.
QBluetoothDeviceDiscoveryAgent::PoweredOffError2L'adaptateur Bluetooth est hors tension ; mettez-le sous tension avant de lancer la détection.
QBluetoothDeviceDiscoveryAgent::InputOutputError1Une erreur s'est produite lors de l'écriture ou de la lecture sur le périphérique.
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError3L'adresse de l'adaptateur local fournie ne correspond à l'adresse physique d'aucun périphérique Bluetooth local.
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError (since Qt 5.5)4La recherche de périphériques n'est pas possible ou n'est pas implémentée sur la plateforme actuelle. L'erreur est générée en réponse à un appel à la fonction ` start()`. C'est le cas, par exemple, des versions d'iOS antérieures à la version 5.0, qui ne prennent pas du tout en charge la recherche de périphériques Bluetooth.
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod (since Qt 5.8)5L'une des méthodes de détection demandées n'est pas prise en charge par la plateforme actuelle.
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError (since Qt 6.2)6Le service de localisation est désactivé. L’utilisation des API Bluetooth n’est pas possible lorsque le service de localisation est désactivé.
QBluetoothDeviceDiscoveryAgent::MissingPermissionsError (since Qt 6.4)7Le système d'exploitation demande des autorisations qui n'ont pas été accordées par l'utilisateur.
QBluetoothDeviceDiscoveryAgent::UnknownError100Une erreur inconnue s’est produite.

Documentation des fonctions membres

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

Crée un nouvel agent de détection de périphériques Bluetooth dont le parent est parent.

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

Crée un nouvel agent de détection de périphériques Bluetooth à l'aide de ` parent`.

Il utilise deviceAdapter pour la recherche de périphériques. Si deviceAdapter est instancié par défaut, l'objet QBluetoothDeviceDiscoveryAgent résultant utilisera l'adaptateur Bluetooth local par défaut.

Si l'on spécifie un deviceAdapter qui n'est pas un adaptateur local, error() sera défini sur InvalidBluetoothAdapterError. Il est donc recommandé de vérifier l'indicateur d'erreur immédiatement après l'utilisation de ce constructeur.

Voir également error().

[virtual noexcept] QBluetoothDeviceDiscoveryAgent::~QBluetoothDeviceDiscoveryAgent()

Destructeur pour ~QBluetoothDeviceDiscoveryAgent()

[signal] void QBluetoothDeviceDiscoveryAgent::canceled()

Ce signal est émis lorsque la détection des périphériques est interrompue par un appel à la fonction ` stop()`.

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

Ce signal est émis lorsque l'appareil Bluetooth décrit par ` info ` est détecté.

Le signal est émis dès que les informations les plus importantes concernant l’appareil ont été collectées. Cependant, tant que le signal finished() n’a pas été émis, la collecte d’informations se poursuit, même pour les appareils déjà détectés. Cela vaut en particulier pour les informations relatives à la puissance du signal (RSSI) et les mises à jour des données du fabricant. Si le cas d’utilisation nécessite des mises à jour continues des données du fabricant ou de la RSSI, il est conseillé de récupérer les informations sur le périphérique via ` discoveredDevices()` une fois la détection terminée ou d’écouter le signal ` deviceUpdated()`.

Si la valeur de ` lowEnergyDiscoveryTimeout()` est supérieure à 0, le signal n’est émis que lorsqu’au moins un attribut de ` info ` change. Cela reflète le souhait de recevoir des mises à jour à mesure que des informations plus précises deviennent disponibles. La seule exception à ce comportement se produit lorsque ` lowEnergyDiscoveryTimeout ` est défini sur ` 0`. Un délai d’expiration de ` 0 ` indique la volonté de surveiller l’apparition et la disparition des périphériques Low Energy au fil du temps. Dans ces conditions, le signal `deviceDiscovered()` est émis même si ` info ` n’a pas changé depuis la dernière émission du signal.

Voir également QBluetoothDeviceInfo::rssi() et lowEnergyDiscoveryTimeout().

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

Ce signal est émis lorsque l'agent reçoit des informations supplémentaires concernant le périphérique Bluetooth décrit par info. Les indicateurs updatedFields indiquent quelles informations ont été mises à jour.

Au cours de la découverte, certaines informations peuvent évoluer de manière dynamique, telles que signal strength et manufacturerData. Ce signal vous indique que si votre application affiche ces données, elle peut les mettre à jour sans attendre la fin de la découverte.

Voir également QBluetoothDeviceInfo::rssi() et lowEnergyDiscoveryTimeout().

QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const

Renvoie une liste de tous les périphériques Bluetooth détectés.

QBluetoothDeviceDiscoveryAgent::Error QBluetoothDeviceDiscoveryAgent::error() const

Renvoie la dernière erreur.

Les éventuelles erreurs précédentes sont effacées lors du redémarrage de la découverte.

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

Ce signal est émis lorsqu'une erreur « error » se produit lors de la détection d'un périphérique Bluetooth. Le paramètre « error » décrit l'erreur qui s'est produite.

Cette fonction a été introduite dans Qt 6.2.

Voir également error() et errorString().

QString QBluetoothDeviceDiscoveryAgent::errorString() const

Renvoie une description lisible par l'utilisateur de la dernière erreur.

Voir également error() et errorOccurred().

[signal] void QBluetoothDeviceDiscoveryAgent::finished()

Ce signal est émis lorsque la détection des appareils Bluetooth est terminée. Il n'est pas émis si la détection des appareils se termine par une erreur.

bool QBluetoothDeviceDiscoveryAgent::isActive() const

Renvoie « true » si l'agent est en train de détecter des périphériques Bluetooth ; sinon, renvoie « false ».

int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const

Renvoie un délai d'expiration, exprimé en millisecondes, qui s'applique à la recherche de périphériques Bluetooth Low Energy. La valeur « -1 » indique que la plateforme ne prend pas en charge cette propriété et que le délai d'expiration pour la recherche de périphériques ne peut pas être modifié. La valeur « 0 » implique une recherche sans fin qui doit être interrompue manuellement via la fonction stop().

Voir également setLowEnergyDiscoveryTimeout().

void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)

Définit la durée maximale de recherche des appareils Bluetooth Low Energy à timeout en millisecondes. Si timeout est 0, la découverte se poursuit jusqu’à ce que stop() soit appelé.

Cela tient compte du fait que le processus de découverte des appareils Bluetooth Low Energy est généralement illimité dans le temps. La plateforme continue de rechercher d’autres appareils jusqu’à ce que la recherche soit arrêtée manuellement. Le délai d’expiration garantit que la recherche est interrompue après timeout millisecondes. Bien entendu, il est toujours possible d’interrompre manuellement la découverte en appelant stop().

La nouvelle valeur de délai d'expiration ne prend effet qu'au redémarrage de la recherche de périphériques. De plus, ce délai n'affecte pas la recherche classique de périphériques Bluetooth. Selon la plateforme, la recherche classique peut allonger la durée totale du processus de découverte au-delà de timeout.

Pour une découverte Bluetooth Low Energy fiable, utilisez au moins 40 000 millisecondes.

Voir également lowEnergyDiscoveryTimeout().

[slot] void QBluetoothDeviceDiscoveryAgent::start()

Lance la détection des appareils Bluetooth, si elle n'est pas déjà en cours.

Le signal « deviceDiscovered() » est émis à chaque fois qu’un appareil est détecté. Le signal « finished() » est émis une fois la détection des appareils terminée. La détection utilise l’ensemble maximal des méthodes de détection prises en charge sur la plateforme.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// 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(); });
Pour plus d’exemples et d’approches, consultez la section « Connexion à des slots surchargés ».

Voir également ` supportedDiscoveryMethods()`.

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

Lance la détection des périphériques Bluetooth, si celle-ci n'est pas déjà en cours et si les methods s fournies sont prises en charge. Les methods s de détection limitent la portée de la recherche de périphériques. Par exemple, si le service ou le périphérique cible est un périphérique Bluetooth Low Energy, cette fonction peut être utilisée pour limiter la recherche aux périphériques Bluetooth Low Energy, ce qui réduit considérablement le temps de détection.

Remarque : l’ methods ne détermine que le type de détection et n’implique pas le filtrage des résultats. Par exemple, la recherche peut toujours contenir des appareils Bluetooth classiques même si l’ methods est défini sur « LowEnergyMethod » uniquement. Cela peut s’expliquer par la présence de résultats de recherche précédemment mis en cache, qui peuvent être intégrés aux résultats de la recherche.

Remarque : certaines plateformes (par exemple Windows) peuvent également fournir des résultats mis en cache pour les appareils qui ne diffusent pas d’annonce pour le moment. D’autres plateformes (comme iOS) ne fournissent que des informations sur les appareils diffusant actuellement une annonce. Vous pouvez enregistrer l’UUID (ou l’adresse Bluetooth) de l’appareil reçu lors de sa première détection, puis l’utiliser ultérieurement pour établir directement une connexion (voir QBluetoothDeviceInfo). De cette manière, les applications peuvent omettre les phases ultérieures de détection des appareils. L’utilisation de l’adresse Bluetooth nécessite que l’adresse Bluetooth de l’appareil distant ne change pas.

Remarque : ce slot est surchargé. Pour vous connecter à ce slot :

// 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); });
Pour plus d’exemples et d’approches, consultez la section « Connexion à des slots surchargés ».

[slot] void QBluetoothDeviceDiscoveryAgent::stop()

Arrête la recherche d'appareils Bluetooth. Le signal `cancel()` est émis dès que la recherche d'appareils est annulée. La fonction ` start()` peut être appelée avant la réception du signal `cancel()`. Une fois que la fonction ` start()` a été appelée, le signal `cancel()` issu de la recherche précédente sera ignoré.

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

Cette fonction renvoie les méthodes de détection prises en charge par la plateforme actuelle. Elle permet de limiter la portée de la détection des périphériques.

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