Sur cette page

QBluetoothServiceDiscoveryAgent Class

La classe QBluetoothServiceDiscoveryAgent vous permet de rechercher des services Bluetooth. Plus d'informations...

En-tête : #include <QBluetoothServiceDiscoveryAgent>
CMake : find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake : QT += bluetooth
Hérite : 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 repose sur le processus de découverte de services Bluetooth (SDP). Les étapes suivantes sont nécessaires pour interroger les services fournis par tous les dispositifs Bluetooth pouvant être contactés :

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))) ; // Démarrer une découverte discoveryAgent->start() ; //...}// Dans votre slot local, lisez les informations sur les appareils trouvésvoid MyClass::serviceDiscovered(const QBluetoothServiceInfo &service){
    qDebug() << "Found new service:" << service.serviceName()
            << '('<< service.device().address().toString()<< ')'; }

Par défaut, une découverte minimale du service est effectuée. Dans ce mode, les objets QBluetoothServiceInfo renvoyés sont garantis de ne contenir que des informations sur le périphérique et l'UUID du service. Selon les capacités de la plate-forme et de l'appareil, d'autres informations sur le service 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 recherche ne trouve pas un appareil bien qu'il soit physiquement disponible. Dans ce cas, une recherche complète doit être effectuée pour forcer la mise à jour du cache de la plateforme. Cependant, pour la plupart des cas d'utilisation, une recherche minimale est suffisante car elle est beaucoup plus rapide et d'autres classes qui nécessitent des informations à jour, telles que QBluetoothSocket::connectToService(), effectueront une recherche supplémentaire si nécessaire. Si des informations complètes sur le service sont nécessaires, passez FullDiscovery comme paramètre discoveryMode à start().

Cette classe peut utiliser en interne QBluetoothDeviceDiscoveryAgent pour trouver des dispositifs inconnus.

La recherche de services peut également trouver des services Bluetooth Low Energy si le dispositif cible est une combinaison d'un dispositif classique et d'un dispositif Low Energy. Ces appareils doivent annoncer leurs services Bluetooth 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 annoncera pas via SDP. La classe QLowEnergyController doit être utilisée pour effectuer la découverte de services sur les appareils à faible énergie.

Sur iOS, cette classe ne peut pas être utilisée car la plateforme n'expose pas d'API qui pourrait permettre l'accès 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.

ConstanteValeurDescription
QBluetoothServiceDiscoveryAgent::MinimalDiscovery0Effectue une découverte minimale des services. Les objets QBluetoothServiceInfo renvoyés peuvent être incomplets et ne sont garantis que pour contenir les informations UUID de l'appareil et du service. Étant donné qu'une recherche minimale s'appuie sur des données SDP mises en cache, il se peut qu'elle ne trouve pas un appareil physiquement existant tant qu'une recherche FullDiscovery n'est pas effectuée.
QBluetoothServiceDiscoveryAgent::FullDiscovery1Effectue une découverte complète du service.

enum QBluetoothServiceDiscoveryAgent::Error

Cette énumération décrit les erreurs qui peuvent survenir lors de la découverte d'un service.

ConstanteValeurDescription de l'erreur
QBluetoothServiceDiscoveryAgent::NoErrorQBluetoothDeviceDiscoveryAgent::NoErrorAucune erreur n'est survenue.
QBluetoothServiceDiscoveryAgent::PoweredOffErrorQBluetoothDeviceDiscoveryAgent::PoweredOffErrorL'adaptateur Bluetooth est hors tension, mettez-le sous tension avant de procéder à la découverte.
QBluetoothServiceDiscoveryAgent::InputOutputErrorQBluetoothDeviceDiscoveryAgent::InputOutputErrorUne erreur s'est produite lors de l'écriture ou de la lecture du périphérique.
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3)QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterErrorL'adresse de l'adaptateur local transmise ne correspond pas à l'adresse physique de l'adaptateur d'un périphérique Bluetooth local.
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4)QBluetoothDeviceDiscoveryAgent::MissingPermissionsErrorLe système d'exploitation demande des autorisations qui n'ont pas été accordées par l'utilisateur.
QBluetoothServiceDiscoveryAgent::UnknownErrorQBluetoothDeviceDiscoveryAgent::UnknownErrorUne erreur inconnue s'est produite.

Documentation des fonctions membres

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

Construit un nouveau QBluetoothServiceDiscoveryAgent avec parent. La recherche est effectuée via l'adaptateur Bluetooth local par défaut.

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

Construit un nouveau QBluetoothServiceDiscoveryAgent pour deviceAdapter et avec parent.

Il utilise deviceAdapter pour la recherche de services. Si deviceAdapter est construit par défaut, l'objet QBluetoothServiceDiscoveryAgent résultant utilisera l'adaptateur Bluetooth local par défaut.

Si un adaptateur deviceAdapter qui n'est pas un adaptateur local est spécifié, error() prendra la valeur InvalidBluetoothAdapterError. Il est donc recommandé de tester le drapeau d'erreur immédiatement après l'utilisation de ce constructeur.

Note : Sur WinRT, l'adresse de l'adaptateur passée sera ignorée.

Note : Sur Android, passer une adresse deviceAdapter n'a pas de sens car Android 6.0 ou plus récent ne publie plus l'adresse Bluetooth locale. Par conséquent, l'adresse de l'adaptateur transmise ne peut jamais être comparée à l'adresse de l'adaptateur local. Par conséquent, 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 du service a été annulée par un appel à stop().

[slot] void QBluetoothServiceDiscoveryAgent::clear()

Efface les résultats des recherches de services précédentes et réinitialise uuidFilter(). Cette fonction ne fait rien pendant une recherche de service en cours (voir isActive()).

Voir aussi discoveredServices().

QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const

Renvoie la liste de tous les services découverts.

Cette liste de services accumule les services nouvellement découverts à la suite de plusieurs appels à start(). À moins que clear() ne soit appelé, la taille de la liste ne peut pas diminuer. Cela signifie que si un périphérique Bluetooth distant se déplace hors de portée entre deux appels ultérieurs à start(), la liste peut contenir des entrées périmées.

Remarque : la liste des services doit toujours être effacée avant que le mode de découverte ne soit modifié.

Voir également clear().

QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const

Renvoie le type d'erreur qui s'est produite en dernier. Si la recherche de services est effectuée pour un seul remoteAddress(), il renverra les erreurs qui se sont produites lors de la recherche de services sur ce dispositif. Si l'option remoteAddress() n'est pas activée et que les appareils sont découverts par un balayage, les erreurs survenues lors de la découverte de services sur des appareils individuels ne sont pas enregistrées et aucun signal n'est émis. Dans ce cas, les erreurs sont assez normales car certains appareils peuvent ne pas répondre à la découverte ou ne plus être à portée. Ces erreurs sont supprimées. Si aucun service n'est renvoyé, on peut supposer qu'aucun service n'a pu être découvert.

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

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

Ce signal est émis lorsqu'une erreur se produit sur error. 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 lisible par l'homme de la dernière erreur survenue lors de la découverte du service.

Voir aussi error() et errorOccurred().

[signal] void QBluetoothServiceDiscoveryAgent::finished()

Ce signal est émis lorsque la découverte du service Bluetooth est terminée.

Contrairement au signal QBluetoothDeviceDiscoveryAgent::finished(), ce signal est émis même en cas d'erreur lors de la découverte du service. Il est donc recommandé de vérifier le signal errorOccurred() pour évaluer le succès de la découverte du service.

bool QBluetoothServiceDiscoveryAgent::isActive() const

Renvoie true si la recherche de services est actuellement active ; sinon, renvoie false. Une découverte active peut être arrêtée en appelant stop().

QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const

Renvoie l'adresse du dispositif distant. Si setRemoteAddress() n'est pas appelé, la fonction renvoie une adresse construite par défaut : QBluetoothAddress.

Voir aussi setRemoteAddress().

[signal] void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)

Ce signal est émis lorsque le service Bluetooth décrit par info est découvert.

Remarque : le paramètre QBluetoothServiceInfo transmis peut contenir un service Bluetooth Low Energy si l'appareil cible annonce le service via SDP. Cela est nécessaire pour les appareils qui prennent en charge à la fois les services Bluetooth classiques (BaseRate) et les services à faible consommation d'énergie.

Voir aussi QBluetoothDeviceInfo::coreConfigurations().

bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)

Définit l'adresse de l'appareil distant à address. Si address est construit par défaut, les services seront découverts sur tous les appareils Bluetooth pouvant être contactés. Une nouvelle adresse distante ne peut être définie que lorsqu'il n'y a pas de découverte de services en cours ; sinon, cette fonction renvoie un faux.

Sur certaines plateformes, la découverte de services peut conduire à des demandes d'appairage. Il n'est donc pas recommandé d'effectuer des recherches de services sur tous les appareils. Cette fonction peut être utilisée pour restreindre la recherche de services à un appareil particulier.

Voir aussi remoteAddress().

void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)

Il s'agit d'une fonction membre surchargée, fournie pour des raisons de commodité.

Fixe le filtre UUID à une liste contenant l'élément unique uuid. La correspondance s'applique aux attributs ServiceId et ServiceClassIds du service.

Voir aussi uuidFilter().

void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)

Définit le filtre UUID à uuids. Seuls les services correspondant aux UUID de uuids seront renvoyés. La correspondance s'applique aux attributs ServiceId et ServiceClassIds du service.

Une liste d'UUID vide est équivalente à une liste contenant uniquement QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup.

Voir aussi uuidFilter().

[slot] void QBluetoothServiceDiscoveryAgent::start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)

Démarre la découverte des services. mode spécifie le type de découverte des services à effectuer.

Sur certaines plates-formes, la découverte de l'appareil peut conduire à des demandes d'appariement.

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 arrêté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.