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>
qmake: QT += bluetooth
Inherits: 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

Reimplementierte ö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)

Reimplementierte geschützte Funktionen

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

Detaillierte Beschreibung

QBluetoothSocket unterstützt zwei Socket-Typen, L2CAP und RFCOMM.

L2CAP QBluetoothSocket ist ein Low-Level-Datagramm-orientierter Bluetooth-Socket. Android unterstützt L2CAP nicht für Socket-Verbindungen.

RFCOMM ist ein zuverlässiger, stream-orientierter Socket. RFCOMM-Sockets emulieren einen seriellen RS-232-Anschluss.

Um eine Verbindung zu einem Bluetooth-Dienst herzustellen, erstellen Sie einen Socket des entsprechenden Typs und rufen connectToService() auf, wobei Sie die Bluetooth-Adresse und die Portnummer übergeben. QBluetoothSocket gibt das Signal connected() aus, wenn die Verbindung hergestellt ist.

Wenn Protocol auf einer Plattform nicht unterstützt wird, führt der Aufruf von connectToService() zu einer Fehlermeldung UnsupportedProtocolError.

Hinweis: QBluetoothSocket unterstützt keine synchronen Lese- und Schreiboperationen. Funktionen wie waitForReadyRead() und waitForBytesWritten() sind nicht implementiert. E/A-Operationen 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 QBluetoothSocket-bezogene Funktionen ermöglicht.

Hinweis: Unter macOS Monterey (12) wird der Socket-Datenfluss angehalten, wenn ein modaler Dialog ausgeführt oder ein Ereignisverfolgungsmodus aufgerufen wird (z. B. durch langes Drücken einer Schaltfläche zum Schließen des Fensters). Dies kann sich in zukünftigen Versionen von macOS ändern.

Dokumentation der Mitgliedstypen

enum class QBluetoothSocket::SocketError

Diese Aufzählung beschreibt Bluetooth-Socket-Fehlertypen.

KonstanteWertBeschreibung
QBluetoothSocket::SocketError::UnknownSocketError1Ein unbekannter Fehler ist aufgetreten.
QBluetoothSocket::SocketError::NoSocketError0Kein Fehler. Wird für Tests verwendet.
QBluetoothSocket::SocketError::HostNotFoundError3Der Remote-Host konnte nicht gefunden werden.
QBluetoothSocket::SocketError::ServiceNotFoundError4Der Dienst UUID konnte auf dem entfernten Host nicht gefunden werden.
QBluetoothSocket::SocketError::NetworkError5Der Versuch, vom Socket zu lesen oder zu schreiben, hat einen Fehler ergeben
QBluetoothSocket::SocketError::UnsupportedProtocolError6Die Protocol wird auf dieser Plattform nicht unterstützt.
QBluetoothSocket::SocketError::OperationError7Ein Vorgang wurde versucht, während sich der Socket in einem Zustand befand, der dies nicht zuließ.
QBluetoothSocket::SocketError::RemoteHostClosedError (since Qt 5.10)2Der entfernte Host hat die Verbindung geschlossen.
QBluetoothSocket::SocketError::MissingPermissionsError (since Qt 6.4)8Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht gewährt wurden.

enum class QBluetoothSocket::SocketState

Dieses Enum beschreibt den Zustand des Bluetooth-Sockets.

KonstanteWertBeschreibung
QBluetoothSocket::SocketState::UnconnectedState0Socket ist nicht verbunden.
QBluetoothSocket::SocketState::ServiceLookupState1Socket fragt Verbindungsparameter ab.
QBluetoothSocket::SocketState::ConnectingState2Socket versucht, eine Verbindung zu einem Gerät herzustellen.
QBluetoothSocket::SocketState::ConnectedState3Socket ist mit einem Gerät verbunden.
QBluetoothSocket::SocketState::BoundState4Socket ist an eine lokale Adresse und einen Port gebunden.
QBluetoothSocket::SocketState::ClosingState5Socket ist verbunden und wird geschlossen, sobald alle anstehenden Daten in den Socket geschrieben wurden.
QBluetoothSocket::SocketState::ListeningState6Socket wartet auf eingehende Verbindungen.

Dokumentation der Mitgliedsfunktionen

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

Baut eine Bluetooth-Buchse mit parent auf.

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

Konstruiert eine Bluetooth-Buchse des Typs socketType, mit 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 alle anstehenden Daten im Schreibpuffer.

Hinweis: Unter Android erfordert das Abbrechen des Sockets eine asynchrone Interaktion mit Android-Threads. Daher werden die zugehörigen Signale disconnected() und stateChanged() verzögert, bis die Threads das Schließen beendet haben.

Siehe auch disconnectFromService() und close().

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

Reimplements: 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

Reimplements: QIODevice::bytesToWrite() const.

Gibt die Anzahl der Bytes zurück, die darauf warten, geschrieben zu werden. Die Bytes werden geschrieben, wenn die Kontrolle zur Ereignisschleife zurückkehrt.

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

Reimplements: QIODevice::canReadLine() const.

Gibt true zurück, wenn Sie mindestens eine Zeile aus dem Gerät lesen können

[override virtual] void QBluetoothSocket::close()

Reimplements: 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 das Schließen abgeschlossen haben.

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

Versucht, eine Verbindung zu dem durch service beschriebenen Dienst herzustellen.

Der Socket wird im angegebenen openMode geöffnet. Das socketType() wird ignoriert, wenn service ein abweichendes QBluetoothServiceInfo::socketProtocol() angibt.

Der Socket ruft zunächst ConnectingState auf und versucht, eine Verbindung zu dem Gerät herzustellen, das service bereitstellt. Wenn eine Verbindung zustande kommt, geht QBluetoothSocket in ConnectedState und sendet connected().

Zu jedem Zeitpunkt kann der Socket errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.

Beachten Sie, dass die meisten Plattformen vor der Verbindung mit dem entfernten Gerät ein Pairing erfordern. Andernfalls kann der Verbindungsprozess fehlschlagen.

Unter Android sind nur RFCOMM-Verbindungen möglich. Diese Funktion ignoriert jegliche Socket-Protokoll-Anzeige und geht von RFCOMM aus.

Siehe auch state() und disconnectFromService().

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

Versucht, eine Verbindung zu dem durch uuid identifizierten Dienst auf dem Gerät mit der Adresse address herzustellen.

Der Socket wird unter der angegebenen Adresse openMode geöffnet.

Bei BlueZ betritt der Socket zunächst ServiceLookupState und fragt die Verbindungsparameter für uuid ab. Wenn die Dienstparameter erfolgreich abgerufen werden, geht der Socket zu ConnectingState und versucht, eine Verbindung zu address herzustellen. Wenn eine Verbindung hergestellt wird, geht QBluetoothSocket zu ConnectedState und sendet connected().

Unter Android kann die Dienstverbindung direkt über die UUID des Ferndienstes hergestellt werden. Daher benötigt die Plattform die ServiceLookupState nicht und socketType() wird immer auf QBluetoothServiceInfo::RfcommProtocol gesetzt.

Zu jedem Zeitpunkt kann der Socket errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.

Beachten Sie, dass die meisten Plattformen vor der Verbindung mit dem entfernten Gerät ein Pairing verlangen. Andernfalls kann der Verbindungsprozess fehlschlagen.

Siehe auch state() und disconnectFromService().

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

Versucht, eine Verbindung mit address auf der angegebenen port herzustellen.

Der Socket wird im angegebenen openMode geöffnet.

Der Socket meldet sich zunächst bei ConnectingState an und versucht, eine Verbindung zu address herzustellen. Wenn eine Verbindung zustande kommt, meldet sich QBluetoothSocket bei ConnectedState an und sendet connected().

Zu jedem Zeitpunkt kann der Socket errorOccurred() ausgeben, um zu signalisieren, dass ein Fehler aufgetreten ist.

Unter Android und BlueZ (Version 5.46 oder höher) kann eine Verbindung zu einem Dienst nicht über einen Port hergestellt werden. Beim Aufruf dieser Funktion wird ein ServiceNotFoundError ausgegeben.

Beachten Sie, dass die meisten Plattformen vor der Verbindung mit dem entfernten Gerät ein Pairing erfordern. Andernfalls kann der Verbindungsprozess fehlschlagen.

Siehe auch state() und disconnectFromService().

[signal] void QBluetoothSocket::connected()

Dieses Signal wird ausgegeben, wenn eine Verbindung hergestellt wird.

Siehe auch QBluetoothSocket::SocketState::ConnectedState und stateChanged().

void QBluetoothSocket::disconnectFromService()

Versucht, den Socket zu schließen. Wenn noch Daten zu schreiben sind, wechselt QBluetoothSocket zu ClosingState und wartet, bis alle Daten geschrieben wurden. Schließlich geht es in UnconnectedState über und gibt das Signal disconnected() aus.

Siehe auch connectToService().

[signal] void QBluetoothSocket::disconnected()

Dieses Signal wird ausgegeben, wenn die Verbindung zur Steckdose unterbrochen 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 Diensteerkennung, um die Anschlussnummer für die Verbindung zu finden.

QBluetoothSocket::SocketError QBluetoothSocket::error() const

Gibt den letzten Fehler zurück.

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

Dieses Signal wird ausgegeben, wenn ein error auftritt.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch error().

QString QBluetoothSocket::errorString() const

Gibt eine vom Benutzer anzeigbare Textzeichenfolge für den Fehler zurück.

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

Reimplements: QIODevice::isSequential() const.

QBluetoothAddress QBluetoothSocket::localAddress() const

Gibt die Adresse des lokalen Geräts zurück.

Obwohl einige Plattformen davon abweichen können, muss der Socket im Allgemeinen verbunden 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.

Obwohl einige Plattformen davon abweichen können, muss der Socket generell verbunden 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, falls vorhanden, andernfalls wird 0 zurückgegeben. Obwohl einige Plattformen abweichen können, muss der Socket im Allgemeinen verbunden sein, um die Rückgabe einer gültigen Portnummer zu gewährleisten.

Unter Android und macOS wird diese Funktion nicht unterstützt und gibt 0 zurück.

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, falls vorhanden, andernfalls wird 0 zurückgegeben. Unter Android wird diese Funktion nicht unterstützt.

QBluetooth::SecurityFlags QBluetoothSocket::preferredSecurityFlags() const

Gibt die für den ersten Verbindungsversuch verwendeten Sicherheitsparameter zurück.

Die Sicherheitsparameter können während oder nach dem Aufbau der Verbindung zwischen den beiden Parteien neu ausgehandelt werden. Wenn eine solche Änderung stattfindet, wird sie nicht im Wert dieses Flags widergespiegelt.

Unter macOS ist dieses Flag immer auf QBluetooth::Security::Secure gesetzt.

Siehe auch setPreferredSecurityFlags().

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

Reimplements: QIODevice::readData(char *data, qint64 maxSize).

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

Setzt den bevorzugten Sicherheitsparameter für den Verbindungsversuch auf flags. Dieser Wert wird beim Aufruf von connectToService() übernommen. Daher ist es erforderlich, die Verbindung erneut herzustellen, um diesen Parameter für eine bestehende Verbindung zu ändern.

Unter Bluez ist diese Eigenschaft standardmäßig auf QBluetooth::Security::Authorization eingestellt.

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 und daher gibt diese Funktion immer QBluetooth::Security::Secure zurück.

Android unterstützt nur zwei Sicherheitsstufen (sicher und nicht-sicher). Wenn dieses Flag auf QBluetooth::Security::NoSecurity gesetzt ist, wird das Socket-Objekt keine Authentifizierung oder Verschlüsselung verwenden. Jede andere Kombination von Sicherheitsflags löst eine sichere Bluetooth-Verbindung aus. Dieses Flag ist standardmäßig auf QBluetooth::Security::Secure gesetzt.

Hinweis: Für eine sichere Verbindung ist ein Pairing zwischen den beiden Geräten erforderlich. Auf einigen Plattformen wird das Pairing automatisch während des Verbindungsaufbaus initiiert. Auf anderen Plattformen muss die Anwendung das Pairing manuell auslösen, bevor eine Verbindung hergestellt werden kann.

Siehe auch preferredSecurityFlags().

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

Setzt den Socket auf socketDescriptor mit dem Typ socketType, der sich im Zustand socketState und im Modus openMode befindet.

Der Socket-Deskriptor ist Eigentum der Instanz QBluetoothSocket und kann nach Beendigung 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, falls vorhanden. 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 nur RFCOMM basierte Sockets.

QBluetoothSocket::SocketState QBluetoothSocket::state() const

Gibt den aktuellen Zustand des Sockets zurück.

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

Dieses Signal wird ausgegeben, wenn der Socket-Status auf state wechselt.

Siehe auch connected(), disconnected(), state(), und QBluetoothSocket::SocketState.

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

Reimplements: QIODevice::writeData(const char *data, qint64 maxSize).

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