QBluetoothServiceDiscoveryAgent Class
La classe QBluetoothServiceDiscoveryAgent vous permet de rechercher des services Bluetooth. En savoir plus...
| En-tête : | #include <QBluetoothServiceDiscoveryAgent> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake : | QT += bluetooth |
| Hérite de : | QObject |
Types publics
| enum | DiscoveryMode { MinimalDiscovery, FullDiscovery } |
| enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, MissingPermissionsError, UnknownError } |
Fonctions publiques
| QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr) | |
| QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr) | |
| virtual | ~QBluetoothServiceDiscoveryAgent() |
| QList<QBluetoothServiceInfo> | discoveredServices() const |
| QBluetoothServiceDiscoveryAgent::Error | error() const |
| QString | errorString() const |
| bool | isActive() const |
| QBluetoothAddress | remoteAddress() const |
| bool | setRemoteAddress(const QBluetoothAddress &address) |
| void | setUuidFilter(const QBluetoothUuid &uuid) |
| void | setUuidFilter(const QList<QBluetoothUuid> &uuids) |
| QList<QBluetoothUuid> | uuidFilter() const |
Emplacements publics
| void | clear() |
| void | start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery) |
| void | stop() |
Signaux
| void | canceled() |
(since 6.2) void | errorOccurred(QBluetoothServiceDiscoveryAgent::Error error) |
| void | finished() |
| void | serviceDiscovered(const QBluetoothServiceInfo &info) |
Description détaillée
Le processus de découverte s'appuie sur le processus de découverte des services Bluetooth (SDP). Les étapes suivantes sont nécessaires pour interroger les services fournis par tous les appareils Bluetooth accessibles :
- créer une instance de QBluetoothServiceDiscoveryAgent,
- se connecter au signal « serviceDiscovered() » ou « finished() »,
- puis appeler la méthode ` start()`.
void MyClass::startServiceDiscovery()
{
// Créer un agent de découverte et se connecter à ses signaux
QBluetoothServiceDiscoveryAgent*discoveryAgent = new QBluetoothServiceDiscoveryAgent(this);
connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
this, SLOT(serviceDiscovered(QBluetoothServiceInfo)));
// Lancer une découverte
discoveryAgent->start();
//...
}
// Dans votre slot local, lisez les informations concernant les périphériques détectés
void MyClass::serviceDiscovered(const QBluetoothServiceInfo&service)
{
qDebug() << "Found new service:" << service.serviceName()
<< '(' << service.device().address().toString() << ')';
}Par défaut, une découverte minimale des services est effectuée. Dans ce mode, les objets QBluetoothServiceInfo renvoyés contiennent exclusivement des informations relatives aux UUID des périphériques et des services. En fonction de la plateforme et des capacités du périphérique, d’autres informations sur les services peuvent également être disponibles. Le mode de découverte minimale des services s’appuie sur les données SDP mises en cache par la plateforme. Il est donc possible que cette découverte ne détecte pas un appareil bien qu’il soit physiquement disponible. Dans ce cas, une découverte complète doit être effectuée pour forcer une mise à jour du cache de la plateforme. Cependant, pour la plupart des cas d’utilisation, une découverte minimale est suffisante car elle est beaucoup plus rapide et d’autres classes nécessitant des informations à jour, telles que ` QBluetoothSocket::connectToService()`, effectueront une découverte supplémentaire si nécessaire. Si les informations complètes sur les services sont requises, passez ` FullDiscovery ` comme paramètre `discoveryMode` à la méthode ` start()`.
Cette classe peut utiliser en interne QBluetoothDeviceDiscoveryAgent pour rechercher des appareils inconnus.
La découverte de services peut également détecter des services Bluetooth Low Energy si le périphérique cible est à la fois un périphérique classique et un périphérique Low Energy. Ces appareils sont tenus de diffuser leurs services Low Energy via SDP. Si l'appareil cible ne prend en charge que les services Bluetooth Low Energy, il est probable qu'il ne les diffuse pas via SDP. La classe QLowEnergyController doit être utilisée pour effectuer la découverte de services sur les appareils Low Energy.
Sous iOS, cette classe ne peut pas être utilisée car la plateforme n’expose pas d’API permettant d’accéder aux fonctionnalités liées à QBluetoothServiceDiscoveryAgent.
Voir également QBluetoothDeviceDiscoveryAgent et QLowEnergyController.
Documentation sur les types de membres
enum QBluetoothServiceDiscoveryAgent::DiscoveryMode
Cette énumération décrit le mode de découverte des services.
| Constante | Valeur | Description |
|---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery | 0 | Effectue une découverte minimale des services. Les objets ` QBluetoothServiceInfo ` renvoyés peuvent être incomplets et ne contiennent, à coup sûr, que les informations d’UUID des périphériques et des services. Étant donné qu’une découverte minimale s’appuie sur des données SDP mises en cache, il se peut qu’elle ne détecte pas un périphérique physiquement existant tant qu’une découverte complète ( FullDiscovery ) n’a pas été effectuée. |
QBluetoothServiceDiscoveryAgent::FullDiscovery | 1 | Effectue une découverte complète des services. |
enum QBluetoothServiceDiscoveryAgent::Error
Cette énumération décrit les erreurs pouvant survenir lors de la découverte des services.
| Constante | Valeur | Description |
|---|---|---|
QBluetoothServiceDiscoveryAgent::NoError | QBluetoothDeviceDiscoveryAgent::NoError | Aucune erreur ne s'est produite. |
QBluetoothServiceDiscoveryAgent::PoweredOffError | QBluetoothDeviceDiscoveryAgent::PoweredOffError | L'adaptateur Bluetooth est éteint ; allumez-le avant de lancer la découverte. |
QBluetoothServiceDiscoveryAgent::InputOutputError | QBluetoothDeviceDiscoveryAgent::InputOutputError | Une erreur s'est produite lors de l'écriture ou de la lecture sur le périphérique. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3) | QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | L'adresse de l'adaptateur local fournie ne correspond à l'adresse physique d'aucun périphérique Bluetooth local. |
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | QBluetoothDeviceDiscoveryAgent::MissingPermissionsError | Le système d'exploitation demande des autorisations qui n'ont pas été accordées par l'utilisateur. |
QBluetoothServiceDiscoveryAgent::UnknownError | QBluetoothDeviceDiscoveryAgent::UnknownError | Une erreur inconnue s’est produite. |
Documentation des fonctions membres
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)
Crée un nouvel objet `QBluetoothServiceDiscoveryAgent` avec l'adresse parent. La recherche s'effectue via l'adaptateur Bluetooth local par défaut.
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Crée un nouvel objet QBluetoothServiceDiscoveryAgent pour deviceAdapter et avec parent.
Il utilise deviceAdapter pour la recherche de services. Si deviceAdapter est instancié par défaut, l'objet QBluetoothServiceDiscoveryAgent résultant utilisera l'adaptateur Bluetooth local par défaut.
Si un deviceAdapter est spécifié qui n'est pas un adaptateur local, error() sera défini sur InvalidBluetoothAdapterError. Il est donc recommandé de vérifier le drapeau d'erreur immédiatement après l'utilisation de ce constructeur.
Remarque : sous WinRT, l’adresse de l’adaptateur transmise sera ignorée.
Remarque : sous Android, le passage d’une adresse d’ deviceAdapter n’a aucun sens, car Android 6.0 ou une version ultérieure ne publie plus l’adresse Bluetooth locale. Par conséquent, l’adresse d’ transmise ne pourra jamais correspondre à celle de l’adaptateur local. Ainsi, l’appel ultérieur à ` start()` déclenchera toujours ` InvalidBluetoothAdapterError`.
Voir également error().
[virtual noexcept] QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()
Destructeur pour QBluetoothServiceDiscoveryAgent
[signal] void QBluetoothServiceDiscoveryAgent::canceled()
Ce signal est déclenché lorsque la découverte de service a été annulée par un appel à la fonction ` stop()`.
[slot] void QBluetoothServiceDiscoveryAgent::clear()
Efface les résultats des précédentes détections de services et réinitialise la fonction uuidFilter(). Cette fonction n'a aucun effet pendant une détection de service en cours (voir isActive()).
Voir également discoveredServices().
QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const
Renvoie la liste de tous les services détectés.
Cette liste de services regroupe les services nouvellement détectés à la suite de plusieurs appels à la fonction ` start()`. À moins que la fonction ` clear()` ne soit appelée, la taille de la liste ne peut pas diminuer. Cela signifie que si un appareil Bluetooth distant sort de la zone de couverture entre deux appels consécutifs à la fonction ` start()`, la liste peut contenir des entrées obsolètes.
Remarque : la liste des services doit toujours être effacée avant de modifier le mode de découverte.
Voir également clear().
QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const
Renvoie le type de l'erreur qui s'est produite en dernier. Si la détection des services est effectuée pour un seul appareil ( remoteAddress()), cette fonction renvoie les erreurs survenues lors de la tentative de détection des services sur cet appareil. Si la méthode remoteAddress() n'est pas définie et que les appareils sont détectés par un balayage, les erreurs survenues lors de la détection des services sur chaque appareil ne sont pas enregistrées et aucun signal n'est émis. Dans ce cas, les erreurs sont tout à fait normales, car certains appareils peuvent ne pas répondre à la détection ou ne plus se trouver à portée. Ces erreurs sont ignorées. Si aucun service n’est renvoyé, on peut supposer qu’aucun service n’a pu être détecté.
Les éventuelles erreurs antérieures sont effacées lors du redémarrage de la détection.
[signal, since 6.2] void QBluetoothServiceDiscoveryAgent::errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)
Ce signal est émis lorsqu'une « error » se produit. Le paramètre « error » décrit l'erreur qui s'est produite.
Cette fonction a été introduite dans Qt 6.2.
QString QBluetoothServiceDiscoveryAgent::errorString() const
Renvoie une description compréhensible par l'utilisateur de la dernière erreur survenue lors de la découverte des services.
Voir également error() et errorOccurred().
[signal] void QBluetoothServiceDiscoveryAgent::finished()
Ce signal est émis lorsque la découverte des services Bluetooth est terminée.
Contrairement au signal « QBluetoothDeviceDiscoveryAgent::finished() », ce signal est émis même lorsqu’une erreur s’est produite pendant la recherche de services. Il est donc recommandé de vérifier le signal « errorOccurred() » pour évaluer si la recherche de services a abouti.
bool QBluetoothServiceDiscoveryAgent::isActive() const
Renvoie « true » si la découverte de service est actuellement active ; sinon, renvoie « false ». Une découverte active peut être interrompue en appelant la fonction « stop() ».
QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
Renvoie l'adresse du périphérique distant. Si la fonction setRemoteAddress() n'est pas appelée, la fonction renvoie un objet QBluetoothAddress initialisé par défaut.
Voir également setRemoteAddress().
[signal] void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)
Ce signal est émis lorsque le service Bluetooth décrit par info est détecté.
Remarque : le paramètre QBluetoothServiceInfo transmis peut contenir un service Bluetooth Low Energy si l'appareil cible annonce ce service via SDP. Cela est obligatoire pour les appareils prenant en charge à la fois le Bluetooth classique (BaseRate) et les services Low Energy.
Voir également QBluetoothDeviceInfo::coreConfigurations().
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
Définit l'adresse de l'appareil distant sur address. Si address est construit par défaut, les services seront détectés sur tous les appareils Bluetooth joignables. Une nouvelle adresse distante ne peut être définie que lorsqu'aucune détection de service n'est en cours ; dans le cas contraire, cette fonction renvoie « false ».
Sur certaines plateformes, la détection de services peut entraîner des demandes d’appairage. Il n’est donc pas recommandé d’effectuer une détection de services sur tous les appareils. Cette fonction permet de limiter la détection de services à un appareil particulier.
Voir également remoteAddress().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)
Il s'agit d'une fonction membre surchargée, fournie à des fins de commodité.
Définit le filtre UUID sur une liste contenant un seul élément : uuid. La correspondance s'applique aux attributs ServiceId et ServiceClassIds du service.
Voir également uuidFilter().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)
Définit le filtre UUID sur uuids. Seuls les services correspondant aux UUID figurant dans uuids seront renvoyés. La correspondance s'applique aux attributs ServiceId et ServiceClassIds du service.
Une liste d'UUID vide équivaut à une liste ne contenant que QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup.
Voir également uuidFilter().
[slot] void QBluetoothServiceDiscoveryAgent::start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)
Lance la détection des services. Le paramètre « mode » permet de spécifier le type de détection des services à effectuer.
Sur certaines plateformes, la détection des appareils peut entraîner des demandes d'appairage.
Voir également DiscoveryMode.
[slot] void QBluetoothServiceDiscoveryAgent::stop()
Arrête le processus de découverte des services. Le signal ` canceled()` sera émis une fois la recherche terminée.
QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
Renvoie le filtre UUID.
Voir aussi setUuidFilter().
© 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.