Auf dieser Seite

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.

KonstanteWertBeschreibung
QBluetoothSocket::SocketError::UnknownSocketError1Es ist ein unbekannter Fehler aufgetreten.
QBluetoothSocket::SocketError::NoSocketError0Kein Fehler. Wird zu Testzwecken verwendet.
QBluetoothSocket::SocketError::HostNotFoundError3Der Remote-Host konnte nicht gefunden werden.
QBluetoothSocket::SocketError::ServiceNotFoundError4Die Dienst-UUID auf dem Remote-Host konnte nicht gefunden werden.
QBluetoothSocket::SocketError::NetworkError5Der Versuch, vom Socket zu lesen oder zu schreiben, hat einen Fehler zurückgegeben
QBluetoothSocket::SocketError::UnsupportedProtocolError6Die Funktion „ Protocol “ wird auf dieser Plattform nicht unterstützt.
QBluetoothSocket::SocketError::OperationError7Es wurde eine Operation versucht, während sich der Socket in einem Zustand befand, der dies nicht zuließ.
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2Der Remote-Host hat die Verbindung geschlossen.
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht erteilt wurden.

enum class QBluetoothSocket::SocketState

Diese Enumeration beschreibt den Status des Bluetooth-Sockets.

KonstanteWertBeschreibung
QBluetoothSocket::SocketState::UnconnectedState0Der Socket ist nicht verbunden.
QBluetoothSocket::SocketState::ServiceLookupState1Der Socket fragt Verbindungsparameter ab.
QBluetoothSocket::SocketState::ConnectingState2Der Socket versucht, eine Verbindung zu einem Gerät herzustellen.
QBluetoothSocket::SocketState::ConnectedState3Der Socket ist mit einem Gerät verbunden.
QBluetoothSocket::SocketState::BoundState4Der Socket ist an eine lokale Adresse und einen lokalen Port gebunden.
QBluetoothSocket::SocketState::ClosingState5Der Socket ist verbunden und wird geschlossen, sobald alle ausstehenden Daten in den Socket geschrieben wurden.
QBluetoothSocket::SocketState::ListeningState6Der 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:

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.