Sur cette page

QBluetoothSocket Class

La classe QBluetoothSocket permet de se connecter à un périphérique Bluetooth sur lequel est exécuté un serveur Bluetooth. En savoir plus...

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

Types publics

enum class SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError }
enum class SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState }

Fonctions publiques

QBluetoothSocket(QObject *parent = nullptr)
QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
virtual ~QBluetoothSocket()
void abort()
void connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
void connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
void connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
void disconnectFromService()
QBluetoothSocket::SocketError error() const
QString errorString() const
QBluetoothAddress localAddress() const
QString localName() const
quint16 localPort() const
QBluetoothAddress peerAddress() const
QString peerName() const
quint16 peerPort() const
QBluetooth::SecurityFlags preferredSecurityFlags() const
void setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
int socketDescriptor() const
QBluetoothServiceInfo::Protocol socketType() const
QBluetoothSocket::SocketState state() const

Fonctions publiques réimplémentées

virtual qint64 bytesAvailable() const override
virtual qint64 bytesToWrite() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool isSequential() const override

Signaux

void connected()
void disconnected()
(since 6.2) void errorOccurred(QBluetoothSocket::SocketError error)
void stateChanged(QBluetoothSocket::SocketState state)

Fonctions protégées

void doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
void setSocketError(QBluetoothSocket::SocketError error_)
void setSocketState(QBluetoothSocket::SocketState state)

Fonctions protégées réimplémentées

virtual qint64 readData(char *data, qint64 maxSize) override
virtual qint64 writeData(const char *data, qint64 maxSize) override

Description détaillée

QBluetoothSocket prend en charge deux types de sockets : L2CAP et RFCOMM.

L2CAP Il s'agit d'un socket Bluetooth de bas niveau orienté datagrammes. Android ne prend pas en charge L2CAP pour les connexions par socket.

RFCOMM est un socket fiable, orienté flux. Les sockets RFCOMM émulent un port série RS-232.

Pour établir une connexion avec un service Bluetooth, créez un socket du type approprié et appelez la méthode ` connectToService()` en lui passant l’adresse Bluetooth et le numéro de port. QBluetoothSocket émettra le signal ` connected()` lorsque la connexion sera établie.

Si la fonction Protocol n’est pas prise en charge sur une plate-forme, l’appel de connectToService() déclenchera une erreur « UnsupportedProtocolError ».

Remarque : QBluetoothSocket ne prend pas en charge les opérations de lecture et d’écriture synchrones. Les fonctions telles que waitForReadyRead() et waitForBytesWritten() ne sont pas implémentées. Les opérations d’E/S doivent être effectuées à l’aide de readyRead(), read() et write().

Sous iOS, cette classe ne peut pas être utilisée car la plateforme ne propose pas d’API permettant d’accéder aux fonctionnalités liées à QBluetoothSocket.

Remarque : sous macOS Monterey (12), le flux de données du socket est suspendu lorsqu'une boîte de dialogue modale est en cours d'exécution ou lorsqu'un mode de suivi des événements est activé (par exemple en appuyant longuement sur le bouton de fermeture d'une fenêtre). Ce problème a été corrigé dans macOS Sequoia (15).

Documentation sur les types de membres

enum class QBluetoothSocket::SocketError

Cette énumération décrit les types d'erreurs liées aux sockets Bluetooth.

ConstanteValeurDescription
QBluetoothSocket::SocketError::UnknownSocketError1Une erreur inconnue s'est produite.
QBluetoothSocket::SocketError::NoSocketError0Aucune erreur. Utilisé à des fins de test.
QBluetoothSocket::SocketError::HostNotFoundError3Impossible de trouver l'hôte distant.
QBluetoothSocket::SocketError::ServiceNotFoundError4Impossible de trouver l'UUID du service sur l'hôte distant.
QBluetoothSocket::SocketError::NetworkError5La tentative de lecture ou d'écriture à partir du socket a renvoyé une erreur
QBluetoothSocket::SocketError::UnsupportedProtocolError6L'Protocol n n'est pas prise en charge sur cette plateforme.
QBluetoothSocket::SocketError::OperationError7Une opération a été tentée alors que le socket se trouvait dans un état ne le permettant pas.
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2L'hôte distant a fermé la connexion.
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8Le système d'exploitation demande des autorisations qui n'ont pas été accordées par l'utilisateur.

enum class QBluetoothSocket::SocketState

Cette énumération décrit l'état de la socket Bluetooth.

ConstanteValeurDescription
QBluetoothSocket::SocketState::UnconnectedState0La socket n'est pas connectée.
QBluetoothSocket::SocketState::ServiceLookupState1La socket interroge les paramètres de connexion.
QBluetoothSocket::SocketState::ConnectingState2Le socket tente de se connecter à un périphérique.
QBluetoothSocket::SocketState::ConnectedState3Le socket est connecté à un périphérique.
QBluetoothSocket::SocketState::BoundState4Le socket est lié à une adresse et à un port locaux.
QBluetoothSocket::SocketState::ClosingState5Le socket est connecté et sera fermé une fois que toutes les données en attente auront été écrites dans le socket.
QBluetoothSocket::SocketState::ListeningState6Le socket est à l'écoute des connexions entrantes.

Documentation des fonctions membres

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

Crée un socket Bluetooth à l'aide de ` parent`.

[explicit] QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)

Crée un socket Bluetooth de type « socketType », avec parent.

[virtual noexcept] QBluetoothSocket::~QBluetoothSocket()

Détruit la prise Bluetooth.

void QBluetoothSocket::abort()

Interrompt la connexion en cours et réinitialise le socket. Contrairement à la fonction ` disconnectFromService()`, cette fonction ferme immédiatement le socket, en supprimant toutes les données en attente dans le tampon d'écriture.

Remarque : sous Android, l'interruption du socket nécessite une interaction asynchrone avec les threads Android. Par conséquent, les signaux associés disconnected() et stateChanged() sont différés jusqu’à ce que les threads aient terminé la fermeture.

Voir également disconnectFromService() et close().

[override virtual] qint64 QBluetoothSocket::bytesAvailable() const

Réimplémente : ` QIODevice::bytesAvailable()` const.

Renvoie le nombre d'octets entrants en attente de lecture.

Voir également bytesToWrite() et read().

[override virtual] qint64 QBluetoothSocket::bytesToWrite() const

Réimplémente : QIODevice::bytesToWrite() const.

Renvoie le nombre d'octets en attente d'écriture. Ces octets sont écrits lorsque le contrôle revient à la boucle d'événements.

[override virtual] bool QBluetoothSocket::canReadLine() const

Réimplémente : ` QIODevice::canReadLine()` const.

Renvoie « true » s'il est possible de lire au moins une ligne à partir du périphérique

[override virtual] void QBluetoothSocket::close()

Réimplémente : QIODevice::close().

Déconnecte la connexion du socket avec l'appareil.

Remarque : sous Android, la fermeture du socket nécessite une interaction asynchrone avec les threads Android. Par conséquent, les signaux associés disconnected() et stateChanged() sont différés jusqu’à ce que les threads aient terminé la fermeture.

void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)

Tentative de connexion au service décrit à l'adresse service.

Le socket est ouvert à l’adresse indiquée openMode. La fonction socketType() est ignorée si service spécifie une autre adresse QBluetoothServiceInfo::socketProtocol().

Le socket entre d’abord dans l’état « ConnectingState » et tente de se connecter au périphérique fournissant l’ service. Si une connexion est établie, le QBluetoothSocket passe à l’état « ConnectedState » et émet l’ connected().

À tout moment, le socket peut émettre errorOccurred() pour signaler qu’une erreur s’est produite.

Notez que la plupart des plateformes nécessitent un appairage avant de se connecter à l'appareil distant. Sinon, le processus de connexion risque d'échouer.

Sous Android, seules les connexions RFCOMM sont possibles. Cette fonction ignore tout indicateur de protocole de socket et suppose qu’il s’agit de RFCOMM.

Voir également state() et disconnectFromService().

void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)

Tentative de connexion au service identifié par uuid sur l'appareil dont l'adresse est address.

Le socket est ouvert à l'adresse openMode indiquée.

Pour BlueZ, le socket accède d’abord à ServiceLookupState et interroge les paramètres de connexion pour uuid. Si les paramètres du service sont récupérés avec succès, le socket accède à ConnectingState et tente de se connecter à address. Si une connexion est établie, QBluetoothSocket accède à ConnectedState et émet connected().

Sous Android, la connexion au service peut être établie directement à l’aide de l’UUID du service distant. Par conséquent, la plateforme n’exige pas l’ ServiceLookupState, et socketType() est toujours défini sur QBluetoothServiceInfo::RfcommProtocol.

À tout moment, le socket peut émettre l’appel errorOccurred() pour signaler qu’une erreur s’est produite.

Notez que la plupart des plateformes exigent un appairage avant de se connecter à l’appareil distant. Sinon, le processus de connexion risque d’échouer.

Voir également state() et disconnectFromService().

void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)

Tentative de connexion à address via l'port indiquée.

Le socket est ouvert sur l'adresse openMode indiquée.

Le socket accède d’abord à ConnectingState, puis tente de se connecter à address. Si une connexion est établie, QBluetoothSocket accède à ConnectedState et émet connected().

À tout moment, le socket peut émettre la fonction errorOccurred() pour signaler qu’une erreur s’est produite.

Sous Android et BlueZ (version 5.46 ou supérieure), il n’est pas possible d’établir une connexion à un service à l’aide d’un port. L’appel de cette fonction émettra un ServiceNotFoundError.

Notez que la plupart des plateformes exigent un appairage avant de se connecter à l’appareil distant. Sinon, le processus de connexion risque d’échouer.

Voir également ` state()` et ` disconnectFromService()`.

[signal] void QBluetoothSocket::connected()

Ce signal est émis lorsqu'une connexion est établie.

Voir également QBluetoothSocket::SocketState::ConnectedState et stateChanged().

void QBluetoothSocket::disconnectFromService()

Tente de fermer le socket. S'il reste des données en attente d'écriture, ` QBluetoothSocket ` passe en état « ClosingState » et attend que toutes les données aient été écrites. À terme, il passe en état « UnconnectedState » et émet le signal ` disconnected()`.

Voir également connectToService().

[signal] void QBluetoothSocket::disconnected()

Ce signal est émis lorsque la connexion est interrompue.

Voir également QBluetoothSocket::SocketState::UnconnectedState et stateChanged().

[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)

Lancez la détection des périphériques via service et ouvrez le socket à l'adresse openMode. Si le socket est créé avec une adresse de périphérique de type UUID de service, utilisez la détection des services pour trouver le numéro de port auquel vous connecter.

QBluetoothSocket::SocketError QBluetoothSocket::error() const

Renvoie la dernière erreur.

[signal, since 6.2] void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)

Ce signal est émis lorsqu'un événement « error » se produit.

Cette fonction a été introduite dans Qt 6.2.

Voir aussi error().

QString QBluetoothSocket::errorString() const

Renvoie une chaîne de texte affichable par l'utilisateur correspondant à l'erreur.

[override virtual] bool QBluetoothSocket::isSequential() const

Réimplémente : QIODevice::isSequential() const.

QBluetoothAddress QBluetoothSocket::localAddress() const

Renvoie l'adresse du périphérique local.

Bien que certaines plateformes puissent présenter des différences, le socket doit généralement être connecté pour garantir le retour d’une adresse valide. C’est notamment le cas lorsque l’on utilise des plateformes prenant en charge plusieurs adaptateurs Bluetooth locaux.

QString QBluetoothSocket::localName() const

Renvoie le nom du périphérique local.

Bien que certaines plateformes puissent présenter des différences, la connexion doit généralement être établie pour garantir le retour d'un nom valide. C'est notamment le cas lorsque l'on traite avec des plateformes prenant en charge plusieurs adaptateurs Bluetooth locaux.

quint16 QBluetoothSocket::localPort() const

Renvoie le numéro de port du socket local s'il est disponible ; sinon, renvoie 0. Bien que cela puisse varier selon les plateformes, le socket doit généralement être connecté pour garantir le renvoi d'un numéro de port valide.

Sous Android et macOS, cette fonctionnalité n'est pas prise en charge et renvoie 0.

QBluetoothAddress QBluetoothSocket::peerAddress() const

Renvoie l'adresse du périphérique homologue.

QString QBluetoothSocket::peerName() const

Renvoie le nom du périphérique homologue.

quint16 QBluetoothSocket::peerPort() const

Renvoie le numéro de port du socket correspondant, s'il est disponible ; sinon, renvoie 0. Sur Android, cette fonctionnalité n'est pas prise en charge.

QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const

Renvoie les paramètres de sécurité utilisés lors de la tentative de connexion initiale.

Les paramètres de sécurité peuvent être renégociés entre les deux parties pendant ou après l'établissement de la connexion. Si un tel changement se produit, il n'est pas pris en compte dans la valeur de cet indicateur.

Sous macOS, cet indicateur est toujours défini sur « QBluetooth::Security::Secure ».

Voir également ` setPreferredSecurityFlags()`.

[override virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)

Réimplémentation de : QIODevice::readData(char *data, qint64 maxSize).

void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)

Définit le paramètre de sécurité préféré pour la tentative de connexion à flags. Cette valeur est prise en compte lors de l'appel de la fonction connectToService(). Il est donc nécessaire de se reconnecter pour modifier ce paramètre sur une connexion existante.

Sur le backend BlueZ sous Linux, les indicateurs sont mis en correspondance avec les niveaux de sécurité du noyau :

La valeur par défaut est « QBluetooth::Security::Authorization ».

Sous Linux avec le backend D-Bus BlueZ et sous Windows, cet indicateur n’est pas pris en charge et est ignoré.

Sous macOS, cette valeur est ignorée car la plateforme n'autorise pas l'accès au paramètre de sécurité du socket. Par défaut, la plateforme privilégie toutefois les connexions sécurisées/chiffrées ; cette fonction renvoie donc toujours « QBluetooth::Security::Secure ».

Android ne prend en charge que deux niveaux de sécurité (sécurisé et non sécurisé). Si ce drapeau est défini sur QBluetooth::Security::NoSecurity, l’objet socket n’utilisera ni authentification ni chiffrement. Toute autre combinaison de drapeaux de sécurité déclenchera une connexion Bluetooth sécurisée. Ce drapeau est défini par défaut sur QBluetooth::Security::Secure.

Remarque : une connexion sécurisée nécessite un appairage entre les deux appareils. Sur certaines plateformes, l’appairage est lancé automatiquement lors de l’établissement de la connexion. D’autres plateformes exigent que l’application déclenche manuellement l’appairage avant de tenter la connexion.

Voir également preferredSecurityFlags().

bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)

Configure le socket pour qu'il utilise socketDescriptor avec un type socketType, qui se trouve dans l'état socketState et en mode openMode.

Le descripteur de socket appartient à l’instance QBluetoothSocket et peut être fermé une fois l’opération terminée.

Renvoie true en cas de succès.

Voir également socketDescriptor().

[protected] void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)

Définit le type de la dernière erreur survenue dans ` error_`.

[protected] void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)

Définit l'état du socket sur « state ».

int QBluetoothSocket::socketDescriptor() const

Renvoie le descripteur de socket spécifique à la plate-forme, s'il est disponible. Cette fonction renvoie -1 si le descripteur n'est pas disponible ou si une erreur s'est produite.

Voir également setSocketDescriptor().

QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const

Renvoie le type de socket. La socket s'adapte automatiquement au protocole proposé par le service distant.

Android ne prend en charge que les sockets basées sur le protocole RFCOMM.

QBluetoothSocket::SocketState QBluetoothSocket::state() const

Renvoie l'état actuel de la socket.

[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)

Ce signal est émis lorsque l'état du socket passe à « state ».

Voir également connected(), disconnected(), state() et QBluetoothSocket::SocketState.

[override virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)

Réimplémentation de : QIODevice::writeData(const char *data, qint64 maxSize).

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