QBluetoothSocket Class
Die Klasse „QBluetoothSocket“ ermöglicht die Verbindung zu einem Bluetooth-Gerät, auf dem ein Bluetooth-Server läuft. Mehr...
| Header: | #include <QBluetoothSocket> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth) target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Erbt von: | QIODevice |
Öffentliche Typen
| enum class | SocketError { UnknownSocketError, NoSocketError, HostNotFoundError, ServiceNotFoundError, NetworkError, …, MissingPermissionsError } |
| enum class | SocketState { UnconnectedState, ServiceLookupState, ConnectingState, ConnectedState, BoundState, …, ListeningState } |
Öffentliche Funktionen
| 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 |
Neu implementierte öffentliche Funktionen
| virtual qint64 | bytesAvailable() const override |
| virtual qint64 | bytesToWrite() const override |
| virtual bool | canReadLine() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
Signale
| void | connected() |
| void | disconnected() |
(since 6.2) void | errorOccurred(QBluetoothSocket::SocketError error) |
| void | stateChanged(QBluetoothSocket::SocketState state) |
Geschützte Funktionen
| void | doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode) |
| void | setSocketError(QBluetoothSocket::SocketError error_) |
| void | setSocketState(QBluetoothSocket::SocketState state) |
Neu implementierte geschützte Funktionen
| virtual qint64 | readData(char *data, qint64 maxSize) override |
| virtual qint64 | writeData(const char *data, qint64 maxSize) override |
Ausführliche Beschreibung
QBluetoothSocket unterstützt zwei Socket-Typen: „ L2CAP “ und „ RFCOMM “.
L2CAP ist ein datagrammorientierter Bluetooth-Socket auf niedriger Ebene. Android unterstützt „ L2CAP “ nicht für Socket-Verbindungen.
RFCOMM ist ein zuverlässiger, streamenorientierter Socket. RFCOMM-Sockets emulieren eine serielle RS-232-Schnittstelle.
Um eine Verbindung zu einem Bluetooth-Dienst herzustellen, erstellen Sie einen Socket des entsprechenden Typs und rufen Sie ` connectToService()` auf, wobei Sie die Bluetooth-Adresse und die Portnummer übergeben. QBluetoothSocket gibt das Signal ` connected()` aus, sobald die Verbindung hergestellt ist.
Wird „ Protocol “ auf einer Plattform nicht unterstützt, löst der Aufruf von „ connectToService()“ den Fehler „ UnsupportedProtocolError “ aus.
Hinweis: QBluetoothSocket unterstützt keine synchronen Lese- und Schreibvorgänge. Funktionen wie „ waitForReadyRead()“ und „ waitForBytesWritten()“ sind nicht implementiert. E/A-Vorgänge sollten mit „ readyRead()“, „ read()“ und „ write()“ durchgeführt werden.
Unter iOS kann diese Klasse nicht verwendet werden, da die Plattform keine API bereitstellt, die den Zugriff auf Funktionen im Zusammenhang mit QBluetoothSocket ermöglichen würde.
Hinweis: Unter macOS Monterey (12) wird der Datenfluss des Sockets unterbrochen, wenn ein modaler Dialog ausgeführt wird oder der Ereignisverfolgungsmodus aktiviert wird (z. B. durch langes Drücken der Schaltfläche zum Schließen eines Fensters). Dieses Problem wurde in macOS Sequoia (15) behoben.
Dokumentation zu den Mitgliedstypen
enum class QBluetoothSocket::SocketError
Diese Enumeration beschreibt Fehlerarten bei Bluetooth-Sockets.
| Konstante | Wert | Beschreibung |
|---|---|---|
QBluetoothSocket::SocketError::UnknownSocketError | 1 | Es ist ein unbekannter Fehler aufgetreten. |
QBluetoothSocket::SocketError::NoSocketError | 0 | Kein Fehler. Wird zu Testzwecken verwendet. |
QBluetoothSocket::SocketError::HostNotFoundError | 3 | Der Remote-Host konnte nicht gefunden werden. |
QBluetoothSocket::SocketError::ServiceNotFoundError | 4 | Die Dienst-UUID auf dem Remote-Host konnte nicht gefunden werden. |
QBluetoothSocket::SocketError::NetworkError | 5 | Der Versuch, vom Socket zu lesen oder zu schreiben, hat einen Fehler zurückgegeben |
QBluetoothSocket::SocketError::UnsupportedProtocolError | 6 | Die Funktion „ Protocol “ wird auf dieser Plattform nicht unterstützt. |
QBluetoothSocket::SocketError::OperationError | 7 | Es wurde eine Operation versucht, während sich der Socket in einem Zustand befand, der dies nicht zuließ. |
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10) | 2 | Der Remote-Host hat die Verbindung geschlossen. |
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4) | 8 | Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht erteilt wurden. |
enum class QBluetoothSocket::SocketState
Diese Enumeration beschreibt den Status des Bluetooth-Sockets.
| Konstante | Wert | Beschreibung |
|---|---|---|
QBluetoothSocket::SocketState::UnconnectedState | 0 | Der Socket ist nicht verbunden. |
QBluetoothSocket::SocketState::ServiceLookupState | 1 | Der Socket fragt Verbindungsparameter ab. |
QBluetoothSocket::SocketState::ConnectingState | 2 | Der Socket versucht, eine Verbindung zu einem Gerät herzustellen. |
QBluetoothSocket::SocketState::ConnectedState | 3 | Der Socket ist mit einem Gerät verbunden. |
QBluetoothSocket::SocketState::BoundState | 4 | Der Socket ist an eine lokale Adresse und einen lokalen Port gebunden. |
QBluetoothSocket::SocketState::ClosingState | 5 | Der Socket ist verbunden und wird geschlossen, sobald alle ausstehenden Daten in den Socket geschrieben wurden. |
QBluetoothSocket::SocketState::ListeningState | 6 | Der Socket wartet auf eingehende Verbindungen. |
Dokumentation der Mitgliedsfunktionen
[explicit] QBluetoothSocket::QBluetoothSocket(QObject *parent = nullptr)
Erstellt einen Bluetooth-Socket mit der Funktion „ parent “.
[explicit] QBluetoothSocket::QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent = nullptr)
Erstellt einen Bluetooth-Socket vom Typ „ socketType “ mit den folgenden Eigenschaften: „ parent “.
[virtual noexcept] QBluetoothSocket::~QBluetoothSocket()
Zerstört die Bluetooth-Buchse.
void QBluetoothSocket::abort()
Bricht die aktuelle Verbindung ab und setzt den Socket zurück. Im Gegensatz zu ` disconnectFromService()` schließt diese Funktion den Socket sofort und verwirft dabei alle im Schreibpuffer befindlichen Daten.
Hinweis: Unter Android erfordert das Abbrechen des Sockets eine asynchrone Interaktion mit Android-Threads. Daher werden die zugehörigen Signale von ` disconnected()` und ` stateChanged()` verzögert, bis die Threads den Schließvorgang abgeschlossen haben.
Siehe auch disconnectFromService() und close().
[override virtual] qint64 QBluetoothSocket::bytesAvailable() const
Implementiert neu: ` QIODevice::bytesAvailable()` const.
Gibt die Anzahl der eingehenden Bytes zurück, die darauf warten, gelesen zu werden.
Siehe auch „ bytesToWrite()“ und „ read()“.
[override virtual] qint64 QBluetoothSocket::bytesToWrite() const
Implementiert neu: ` QIODevice::bytesToWrite()` const.
Gibt die Anzahl der Bytes zurück, die noch geschrieben werden müssen. Die Bytes werden geschrieben, sobald die Kontrolle wieder an die Ereignisschleife zurückgegeben wird.
[override virtual] bool QBluetoothSocket::canReadLine() const
Implementiert: ` QIODevice::canReadLine()` const.
Gibt „true“ zurück, wenn mindestens eine Zeile vom Gerät gelesen werden kann
[override virtual] void QBluetoothSocket::close()
Implementiert: ` QIODevice::close()`.
Trennt die Verbindung des Sockets mit dem Gerät.
Hinweis: Unter Android erfordert das Schließen des Sockets eine asynchrone Interaktion mit Android-Threads. Daher werden die zugehörigen Signale „ disconnected()“ und „ stateChanged()“ verzögert, bis die Threads den Schließvorgang abgeschlossen haben.
void QBluetoothSocket::connectToService(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode = ReadWrite)
Es wird versucht, eine Verbindung zu dem unter service beschriebenen Dienst herzustellen.
Der Socket wird unter der angegebenen Adresse openMode geöffnet. Die Funktion ` socketType()` wird ignoriert, wenn service eine abweichende Adresse QBluetoothServiceInfo::socketProtocol() angibt.
Der Socket wechselt zunächst in den Modus „ ConnectingState “ und versucht, eine Verbindung zu dem Gerät herzustellen, das „ service “ bereitstellt. Wird eine Verbindung hergestellt, wechselt „ QBluetoothSocket “ in den Modus „ ConnectedState “ und gibt „ connected “ () aus.
Zu jedem Zeitpunkt kann der Socket ` errorOccurred()` ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.
Beachten Sie, dass auf den meisten Plattformen vor dem Herstellen einer Verbindung zum Remote-Gerät eine Kopplung erforderlich ist. Andernfalls kann der Verbindungsvorgang fehlschlagen.
Unter Android sind nur RFCOMM-Verbindungen möglich. Diese Funktion ignoriert jegliche Socket-Protokollkennzeichnung und geht von RFCOMM aus.
Siehe auch ` state()` und ` disconnectFromService()`.
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QIODeviceBase::OpenMode openMode = ReadWrite)
Es wird versucht, eine Verbindung zu dem Dienst herzustellen, der durch uuid identifiziert wird, und zwar auf dem Gerät mit der Adresse address.
Der Socket wird unter der angegebenen Adresse openMode geöffnet.
Bei BlueZ wechselt der Socket zunächst zu „ ServiceLookupState “ und fragt die Verbindungsparameter für „ uuid “ ab. Werden die Dienstparameter erfolgreich abgerufen, wechselt der Socket zu „ ConnectingState “ und versucht, eine Verbindung zu „ address “ herzustellen. Wird eine Verbindung hergestellt, wechselt „ QBluetoothSocket “ zu „ ConnectedState “ und gibt „ connected()“ aus.
Unter Android kann die Serviceverbindung direkt über die UUID des Remote-Dienstes hergestellt werden. Daher benötigt die Plattform die ServiceLookupState nicht, und socketType() ist immer auf QBluetoothServiceInfo::RfcommProtocol gesetzt.
Der Socket kann jederzeit errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.
Beachten Sie, dass die meisten Plattformen vor dem Herstellen einer Verbindung zum Remote-Gerät eine Kopplung erfordern. Andernfalls kann der Verbindungsvorgang fehlschlagen.
Siehe auch state() und disconnectFromService().
void QBluetoothSocket::connectToService(const QBluetoothAddress &address, quint16 port, QIODeviceBase::OpenMode openMode = ReadWrite)
Es wird versucht, eine Verbindung zu address über die angegebene port herzustellen.
Der Socket wird unter der angegebenen Adresse openMode geöffnet.
Der Socket wechselt zunächst zu ConnectingState und versucht, eine Verbindung zu address herzustellen. Wenn eine Verbindung hergestellt wird, wechselt QBluetoothSocket zu ConnectedState und gibt connected() aus.
Zu jedem Zeitpunkt kann der Socket die Funktion ` errorOccurred()` aufrufen, um zu signalisieren, dass ein Fehler aufgetreten ist.
Unter Android und BlueZ (Version 5.46 oder höher) kann keine Verbindung zu einem Dienst über einen Port hergestellt werden. Der Aufruf dieser Funktion löst ein „ ServiceNotFoundError “ aus.
Beachten Sie, dass auf den meisten Plattformen vor dem Herstellen einer Verbindung zum Remote-Gerät eine Kopplung erforderlich ist. Andernfalls kann der Verbindungsvorgang fehlschlagen.
Siehe auch ` state()` und ` disconnectFromService()`.
[signal] void QBluetoothSocket::connected()
Dieses Signal wird ausgesendet, wenn eine Verbindung hergestellt wird.
Siehe auch QBluetoothSocket::SocketState::ConnectedState und stateChanged().
void QBluetoothSocket::disconnectFromService()
Versucht, den Socket zu schließen. Wenn noch Daten zum Schreiben anstehen, wechselt „ QBluetoothSocket “ in den Zustand „ ClosingState “ und wartet, bis alle Daten geschrieben wurden. Schließlich wechselt es in den Zustand „ UnconnectedState “ und sendet das Signal „ disconnected()“.
Siehe auch connectToService().
[signal] void QBluetoothSocket::disconnected()
Dieses Signal wird ausgegeben, wenn die Verbindung zum Socket getrennt wird.
Siehe auch QBluetoothSocket::SocketState::UnconnectedState und stateChanged().
[protected] void QBluetoothSocket::doDeviceDiscovery(const QBluetoothServiceInfo &service, QIODeviceBase::OpenMode openMode)
Starten Sie die Geräteerkennung für „ service “ und öffnen Sie den Socket mit „ openMode “. Wenn der Socket mit einer Service-UUID-Geräteadresse erstellt wurde, verwenden Sie die Serviceerkennung, um die Portnummer zu ermitteln, zu der eine Verbindung hergestellt werden soll.
QBluetoothSocket::SocketError QBluetoothSocket::error() const
Gibt den letzten Fehler zurück.
[signal, since 6.2] void QBluetoothSocket::errorOccurred(QBluetoothSocket::SocketError error)
Dieses Signal wird ausgelöst, wenn ein „ error “ auftritt.
Diese Funktion wurde in Qt 6.2 eingeführt.
Siehe auch ` error()`.
QString QBluetoothSocket::errorString() const
Gibt eine für den Benutzer lesbare Textzeichenfolge für den Fehler zurück.
[override virtual] bool QBluetoothSocket::isSequential() const
Implementiert erneut: ` QIODevice::isSequential()` const.
QBluetoothAddress QBluetoothSocket::localAddress() const
Gibt die Adresse des lokalen Geräts zurück.
Auch wenn es bei einigen Plattformen Abweichungen geben kann, muss die Verbindung in der Regel hergestellt sein, um die Rückgabe einer gültigen Adresse zu gewährleisten. Dies gilt insbesondere für Plattformen, die mehrere lokale Bluetooth-Adapter unterstützen.
QString QBluetoothSocket::localName() const
Gibt den Namen des lokalen Geräts zurück.
Auch wenn es bei einigen Plattformen Abweichungen geben kann, muss die Verbindung in der Regel hergestellt sein, um die Rückgabe eines gültigen Namens zu gewährleisten. Dies gilt insbesondere für Plattformen, die mehrere lokale Bluetooth-Adapter unterstützen.
quint16 QBluetoothSocket::localPort() const
Gibt die Portnummer des lokalen Sockets zurück, sofern verfügbar; andernfalls wird 0 zurückgegeben. Auch wenn es auf einigen Plattformen Abweichungen geben kann, muss der Socket in der Regel verbunden sein, um die Rückgabe einer gültigen Portnummer zu gewährleisten.
Unter Android und macOS wird diese Funktion nicht unterstützt und es wird 0 zurückgegeben.
QBluetoothAddress QBluetoothSocket::peerAddress() const
Gibt die Adresse des Peer-Geräts zurück.
QString QBluetoothSocket::peerName() const
Gibt den Namen des Peer-Geräts zurück.
quint16 QBluetoothSocket::peerPort() const
Gibt die Portnummer des Peer-Sockets zurück, sofern verfügbar; andernfalls wird 0 zurückgegeben. Unter Android wird diese Funktion nicht unterstützt.
QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const
Gibt die Sicherheitsparameter zurück, die beim ersten Verbindungsversuch verwendet wurden.
Die Sicherheitsparameter können zwischen den beiden Parteien während oder nach dem Aufbau der Verbindung neu ausgehandelt werden. Sollte eine solche Änderung stattfinden, spiegelt sich dies nicht im Wert dieses Flags wider.
Unter macOS ist dieses Flag immer auf „ QBluetooth::Security::Secure “ gesetzt.
Siehe auch ` setPreferredSecurityFlags()`.
[override virtual protected] qint64 QBluetoothSocket::readData(char *data, qint64 maxSize)
Implementiert: QIODevice::readData(char *data, qint64 maxSize).
void QBluetoothSocket::setPreferredSecurityFlags(QBluetooth::SecurityFlags flags)
Legt den bevorzugten Sicherheitsparameter für den Verbindungsversuch auf „ flags “ fest. Dieser Wert wird beim Aufruf von ` connectToService()` berücksichtigt. Daher ist eine erneute Verbindungsherstellung erforderlich, um diesen Parameter für eine bestehende Verbindung zu ändern.
Auf dem Linux-BlueZ-Backend werden die Flags den Kernel-Sicherheitsstufen zugeordnet:
- QBluetooth::Security::Authorization wird auf „
BT_SECURITY_LOW“ abgebildet; - QBluetooth::Security::Encryption entspricht „
BT_SECURITY_MEDIUM“; - QBluetooth::Security::Secure entspricht „
BT_SECURITY_HIGH“; - QBluetooth::Security::Authentication wird vom Kernel nicht verwendet und ignoriert.
Der Standardwert ist „ QBluetooth::Security::Authorization “.
Unter Linux mit dem BlueZ-D-Bus-Backend und unter Windows wird dieses Flag nicht unterstützt und ignoriert.
Unter macOS wird dieser Wert ignoriert, da die Plattform keinen Zugriff auf den Sicherheitsparameter des Sockets zulässt. Standardmäßig bevorzugt die Plattform jedoch sichere/verschlüsselte Verbindungen, weshalb diese Funktion immer „ QBluetooth::Security::Secure “ zurückgibt.
Android unterstützt nur zwei Sicherheitsstufen (sicher und unsicher). Ist dieses Flag auf „ QBluetooth::Security::NoSecurity “ gesetzt, verwendet das Socket-Objekt weder Authentifizierung noch Verschlüsselung. Jede andere Kombination von Sicherheitsflags löst eine sichere Bluetooth-Verbindung aus. Dieses Flag ist standardmäßig auf „ QBluetooth::Security::Secure “ gesetzt.
Hinweis: Eine sichere Verbindung erfordert eine Kopplung zwischen den beiden Geräten. Auf einigen Plattformen wird die Kopplung automatisch während des Verbindungsaufbaus initiiert. Auf anderen Plattformen muss die Anwendung die Kopplung manuell auslösen, bevor ein Verbindungsversuch unternommen wird.
Siehe auch preferredSecurityFlags().
bool QBluetoothSocket::setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState = SocketState::ConnectedState, QIODeviceBase::OpenMode openMode = ReadWrite)
Stellt den Socket so ein, dass er „ socketDescriptor “ mit dem Typ „ socketType “ verwendet, der sich im Zustand „ socketState “ befindet und den Modus „ openMode “ hat.
Der Socket-Deskriptor gehört der Instanz „ QBluetoothSocket “ und kann nach Abschluss geschlossen werden.
Gibt bei Erfolg „ true “ zurück.
Siehe auch socketDescriptor().
[protected] void QBluetoothSocket::setSocketError(QBluetoothSocket::SocketError error_)
Setzt den Typ des zuletzt aufgetretenen Fehlers auf „ error_ “.
[protected] void QBluetoothSocket::setSocketState(QBluetoothSocket::SocketState state)
Setzt den Socket-Status auf „ state “.
int QBluetoothSocket::socketDescriptor() const
Gibt den plattformspezifischen Socket-Deskriptor zurück, sofern dieser verfügbar ist. Diese Funktion gibt -1 zurück, wenn der Deskriptor nicht verfügbar ist oder ein Fehler aufgetreten ist.
Siehe auch ` setSocketDescriptor()`.
QBluetoothServiceInfo::Protocol QBluetoothSocket::socketType() const
Gibt den Socket-Typ zurück. Der Socket passt sich automatisch an das vom Remote-Dienst angebotene Protokoll an.
Android unterstützt ausschließlich Sockets auf Basis von „ RFCOMM “.
QBluetoothSocket::SocketState QBluetoothSocket::state() const
Gibt den aktuellen Status des Sockets zurück.
[signal] void QBluetoothSocket::stateChanged(QBluetoothSocket::SocketState state)
Dieses Signal wird ausgelöst, wenn sich der Status des Sockets auf „ state “ ändert.
Siehe auch „ connected()“, „ disconnected()“, „ state()“ und „ QBluetoothSocket::SocketState “.
[override virtual protected] qint64 QBluetoothSocket::writeData(const char *data, qint64 maxSize)
Implementiert: ` 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.