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.
| Constante | Valeur | Description |
|---|---|---|
QBluetoothSocket::SocketError::UnknownSocketError | 1 | Une erreur inconnue s'est produite. |
QBluetoothSocket::SocketError::NoSocketError | 0 | Aucune erreur. Utilisé à des fins de test. |
QBluetoothSocket::SocketError::HostNotFoundError | 3 | Impossible de trouver l'hôte distant. |
QBluetoothSocket::SocketError::ServiceNotFoundError | 4 | Impossible de trouver l'UUID du service sur l'hôte distant. |
QBluetoothSocket::SocketError::NetworkError | 5 | La tentative de lecture ou d'écriture à partir du socket a renvoyé une erreur |
QBluetoothSocket::SocketError::UnsupportedProtocolError | 6 | L'Protocol n n'est pas prise en charge sur cette plateforme. |
QBluetoothSocket::SocketError::OperationError | 7 | Une 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) | 2 | L'hôte distant a fermé la connexion. |
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4) | 8 | Le 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.
| Constante | Valeur | Description |
|---|---|---|
QBluetoothSocket::SocketState::UnconnectedState | 0 | La socket n'est pas connectée. |
QBluetoothSocket::SocketState::ServiceLookupState | 1 | La socket interroge les paramètres de connexion. |
QBluetoothSocket::SocketState::ConnectingState | 2 | Le socket tente de se connecter à un périphérique. |
QBluetoothSocket::SocketState::ConnectedState | 3 | Le socket est connecté à un périphérique. |
QBluetoothSocket::SocketState::BoundState | 4 | Le socket est lié à une adresse et à un port locaux. |
QBluetoothSocket::SocketState::ClosingState | 5 | Le socket est connecté et sera fermé une fois que toutes les données en attente auront été écrites dans le socket. |
QBluetoothSocket::SocketState::ListeningState | 6 | Le 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 :
- QBluetooth::Security::Authorization correspond à
BT_SECURITY_LOW; - QBluetooth::Security::Encryption correspond à «
BT_SECURITY_MEDIUM» ; - QBluetooth::Security::Secure correspond à «
BT_SECURITY_HIGH» ; - QBluetooth::Security::Authentication n’est pas utilisé par le noyau et est ignoré.
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.