QBluetoothDeviceDiscoveryAgent Class
La classe QBluetoothDeviceDiscoveryAgent découvre les périphériques Bluetooth à proximité. Plus d'informations...
| En-tête : | #include <QBluetoothDeviceDiscoveryAgent> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Bluetooth)target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake : | QT += bluetooth |
| Hérite : | 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
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
Permet de découvrir les appareils Bluetooth à proximité :
- créer une instance de QBluetoothDeviceDiscoveryAgent,
- connectez-vous aux signaux deviceDiscovered() ou finished(),
- et appelez start().
void MyClass::startDeviceDiscovery() { // Créer un agent de découverte et se connecter à ses signaux QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this) ; connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo))) ; // Démarrer une découverte discoveryAgent->start() ; //...}// Dans votre slot local, lisez les informations sur les appareils trouvésvoid 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 une liste de tous les dispositifs découverts, appelez discoveredDevices() après le signal finished().
Cette classe peut être utilisée pour découvrir des dispositifs Bluetooth classiques et à faible énergie. Le type de dispositif individuel 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 dispositifs. Cependant, toutes les plateformes ne peuvent pas détecter les deux types de dispositifs. Sur les plates-formes présentant cette limitation (par exemple, iOS ne prend en charge que la découverte des appareils à faible énergie), le processus de découverte limitera la recherche au type pris en charge.
Remarque : depuis Android 6.0, la capacité à détecter les appareils nécessite ACCESS_COARSE_LOCATION.
Remarque : le backend Win32 ne prend actuellement pas en charge l'indicateur d'intensité du signal reçu (RSSI), ainsi que les données spécifiques au fabricant ou d'autres mises à jour de données annoncées par les appareils 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 employée par l'agent QBluetoothDeviceDiscoveryAgent.
| Constante | Valeur | Description de la méthode |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoMethod | 0x0 | La découverte n'est pas possible. Aucune des méthodes disponibles n'est prise en charge. |
QBluetoothDeviceDiscoveryAgent::ClassicMethod | 0x01 | Le processus de découverte recherche des dispositifs Bluetooth Classic (BaseRate). |
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod | 0x02 | Le processus de découverte recherche des appareils Bluetooth Low Energy. |
Le type DiscoveryMethods est un typedef 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 découverte d'un appareil Bluetooth.
| Constante | Valeur | Description de l'erreur |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoError | 0 | Aucune erreur ne s'est produite. |
QBluetoothDeviceDiscoveryAgent::PoweredOffError | 2 | L'adaptateur Bluetooth est hors tension, mettez-le sous tension avant de procéder à la découverte. |
QBluetoothDeviceDiscoveryAgent::InputOutputError | 1 | Une erreur s'est produite lors de l'écriture ou de la lecture du périphérique. |
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | 3 | L'adresse de l'adaptateur local transmise ne correspond pas à l'adresse physique de l'adaptateur d'un périphérique Bluetooth local. |
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError (since Qt 5.5) | 4 | La découverte de périphériques n'est pas possible ou n'est pas implémentée sur la plateforme actuelle. L'erreur est définie en réponse à un appel à start(). Les versions d'iOS inférieures à 5.0, qui ne prennent pas du tout en charge la recherche d'appareils Bluetooth, sont un exemple de ce type de situation. |
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod (since Qt 5.8) | 5 | L'une des méthodes de découverte demandées n'est pas prise en charge par la plateforme actuelle. |
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError (since Qt 6.2) | 6 | Le 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) | 7 | Le système d'exploitation demande des autorisations qui n'ont pas été accordées par l'utilisateur. |
QBluetoothDeviceDiscoveryAgent::UnknownError | 100 | Une erreur inconnue s'est produite. |
Documentation des fonctions membres
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)
Construit un nouvel agent de découverte de périphériques Bluetooth avec le parent parent.
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Construit un nouvel agent de découverte de périphériques Bluetooth avec parent.
Il utilise deviceAdapter pour la recherche de périphériques. Si deviceAdapter est construit par défaut, l'objet QBluetoothDeviceDiscoveryAgent résultant utilisera l'adaptateur Bluetooth local par défaut.
Si deviceAdapter est spécifié alors qu'il ne s'agit pas d'un adaptateur local, error() prendra la valeur InvalidBluetoothAdapterError. Il est donc recommandé de tester le drapeau 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écouverte de l'appareil est interrompue par un appel à stop().
[signal] void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)
Ce signal est émis lorsque l'appareil Bluetooth décrit par info est découvert.
Le signal est émis dès que les informations les plus importantes sur l'appareil ont été collectées. Toutefois, tant que le signal finished() n'a pas été émis, la collecte d'informations se poursuit, même pour les appareils déjà découverts. Cela est particulièrement vrai pour les informations sur 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 des RSSI, il est conseillé de récupérer les informations sur l'appareil via discoveredDevices() une fois la découverte terminée ou d'écouter le signal deviceUpdated().
Si lowEnergyDiscoveryTimeout() est supérieur à 0, le signal n'est émis que lorsqu'au moins un attribut de info change. Cela reflète le désir de recevoir des mises à jour au fur et à mesure que des informations plus précises sont disponibles. L'exception à ce comportement est le cas où lowEnergyDiscoveryTimeout est défini comme 0. Un délai d'attente de 0 exprime le souhait de surveiller l'apparition et la disparition des dispositifs à faible consommation d'énergie au fil du temps. Dans ce cas, le signal deviceDiscovered() est émis même si info n'a pas changé depuis la dernière émission de 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 sur l'appareil Bluetooth décrit par info. Les drapeaux updatedFields indiquent quelles informations ont été mises à jour.
Au cours de la découverte, certaines informations peuvent changer de manière dynamique, comme signal strength et manufacturerData. Ce signal vous informe que si votre application affiche ces données, elle peut être mise à jour, plutôt que d'attendre la fin de la découverte.
Voir également QBluetoothDeviceInfo::rssi() et lowEnergyDiscoveryTimeout().
QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const
Renvoie une liste de tous les appareils Bluetooth découverts.
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 recherche.
[signal, since 6.2] void QBluetoothDeviceDiscoveryAgent::errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)
Ce signal est émis lorsqu'une erreur error se produit lors de la découverte d'un appareil Bluetooth. Le paramètre error décrit l'erreur qui s'est produite.
Cette fonction a été introduite dans Qt 6.2.
Voir aussi error() et errorString().
QString QBluetoothDeviceDiscoveryAgent::errorString() const
Renvoie une description lisible par l'homme de la dernière erreur.
Voir aussi error() et errorOccurred().
[signal] void QBluetoothDeviceDiscoveryAgent::finished()
Ce signal est émis lorsque la découverte du périphérique Bluetooth est terminée. Le signal n'est pas émis si la découverte de l'appareil se termine par une erreur.
bool QBluetoothDeviceDiscoveryAgent::isActive() const
Retourne true si l'agent est en train de découvrir des appareils Bluetooth, sinon retourne false.
int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const
Renvoie un délai d'attente en millisecondes appliqué à la recherche de périphériques Bluetooth Low Energy. Une valeur de -1 signifie que la plate-forme ne prend pas en charge cette propriété et que le délai d'attente pour la recherche de périphériques ne peut pas être ajusté. Une valeur de retour de 0 implique une recherche sans fin qui doit être arrêtée manuellement via stop().
Voir également setLowEnergyDiscoveryTimeout().
void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)
Définit la durée maximale de recherche d'un appareil Bluetooth Low Energy à timeout en millisecondes. Si timeout est 0, la découverte se poursuit jusqu'à ce que stop() soit appelé.
Cela reflète le fait que le processus de découverte des dispositifs Bluetooth Low Energy est en grande partie ouvert. La plateforme continue à rechercher d'autres dispositifs jusqu'à ce que la recherche soit arrêtée manuellement. Le délai d'attente 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 du délai d'attente ne prend effet qu'après le redémarrage de la recherche de l'appareil. En outre, le délai d'attente n'affecte pas la recherche classique de périphériques Bluetooth. En fonction de la plate-forme, la recherche classique peut ajouter plus de temps au processus de découverte total au-delà de timeout.
Pour une découverte fiable de Bluetooth Low Energy, utilisez au moins 40000 millisecondes.
Voir également lowEnergyDiscoveryTimeout().
[slot] void QBluetoothDeviceDiscoveryAgent::start()
Démarre la découverte des appareils Bluetooth, si elle n'est pas déjà lancée.
Le signal deviceDiscovered() est émis au fur et à mesure de la découverte de chaque appareil. Le signal finished() est émis lorsque la découverte des périphériques est terminée. La découverte utilise le maximum de méthodes de découverte prises en charge sur la plate-forme.
Note : Ce slot est surchargé. Pour se 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(); });Voir aussi supportedDiscoveryMethods().
[slot] void QBluetoothDeviceDiscoveryAgent::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)
Lance la recherche de périphériques Bluetooth, si elle n'est pas déjà lancée et si les methods fournis sont pris en charge. La découverte methods limite la portée de la recherche de périphériques. Par exemple, si le service ou le dispositif cible est un dispositif Bluetooth Low Energy, cette fonction peut être utilisée pour limiter la recherche aux dispositifs Bluetooth Low Energy, ce qui réduit considérablement le temps de recherche.
Remarque : methods détermine uniquement le type de recherche et n'implique pas le filtrage des résultats. Par exemple, la recherche peut encore contenir des dispositifs Bluetooth classiques bien que methods soit réglé sur LowEnergyMethod uniquement. Cela peut être dû à des résultats de recherche précédemment mis en cache, qui peuvent être incorporés dans les résultats de la recherche.
Remarque : certaines plateformes (par exemple Windows) peuvent également fournir des résultats mis en cache pour les dispositifs qui ne font pas actuellement l'objet d'une publicité. D'autres plates-formes (comme iOS) ne fournissent des informations que sur les dispositifs qui font actuellement l'objet d'une publicité. Vous pouvez stocker l'UUID (ou l'adresse Bluetooth) de l'appareil reçu lors de la première découverte, puis l'utiliser ultérieurement pour établir une connexion directe (voir QBluetoothDeviceInfo). De cette manière, les applications peuvent omettre les phases ultérieures de découverte des appareils. L'utilisation de l'adresse Bluetooth exige que l'adresse Bluetooth du dispositif distant ne change pas.
Note : Cet emplacement est surchargé. Pour se connecter à cet emplacement :
// 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()
Arrête la découverte des appareils Bluetooth. Le signal cancel() est émis une fois que la découverte de l'appareil est annulée. start() peut être appelé avant que le signal d'annulation ne soit reçu. Une fois que start() a été appelé, le signal d'annulation de la découverte précédente est supprimé.
[static] QBluetoothDeviceDiscoveryAgent::DiscoveryMethods QBluetoothDeviceDiscoveryAgent::supportedDiscoveryMethods()
Cette fonction renvoie les méthodes de découverte prises en charge par la plate-forme actuelle. Elle peut être utilisée pour limiter la portée de la découverte de l'appareil.
© 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.