QML类型说明-BluetoothSocket

本文介绍Qt蓝牙Socket QML组件的使用方法,包括如何建立蓝牙连接、发送与接收字符串数据,以及组件的主要属性说明,如连接状态、错误类型和服务详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BluetoothSocket

 

Import Statement:   import QtBluetooth 5.2

Since:  Qt 5.2

Properties

connected :bool

error :enumeration

service :BluetoothService

state :enumeration

stringData :string


DetailedDescription

它允许QML类能和另一个设备进行蓝牙连接并交换字符串。在这个组件中,数据的发送和接收都使用QDataStream来传输QStrings。QDataStream是众所周知的数据格式,能被非QT程序解码。

注意:这个组件只能传输字符串,如果我们希望传输二进制数据,应该使用对应的C++的QBluetoothSocket类。同时参阅QBluetoothSocket和QDataStream。

 

PropertyDocumentation

connected :bool

socket的连接状态。如果建立对等连接,这个属性返回真。不能通过设置这个属性来控制是否连接。当设置它为真时,在连接建立之前,它将不会返回真。

 

error :enumeration

这个属性是最后发生的错误。

NoError

UnknownSocketError

HostNotFoundError

ServiceNotFoundError

NetworkError

UnsupportedProtocolError

错误是QBluetoothSocket::SocketError的派生,这个属性是只读的。

 

service :BluetoothService

连接的远程服务的详细信息。它能被设置成一个静态蓝牙服务的固定描述,也能是被发现的服务返回的信息。

 

state : enumeration

当前socket的状态。

NoServiceSet

Unconnected

ServiceLookup

Connecting

Connected

Closing

Listening

Bound

状态由QBluetoothSocket::SocketState派生,这个属性是只读的。

 

stringData :string

被接受或发送到远程蓝牙设备的数据。抵达的数据能通过链接到这个属性的信号探测到。可使用onStringDataChanged检测数据抵达,然后通过读这个属性获得数据。往这个属性写数据将被发送,如果发送的数据过多,将会阻塞发送,读不会被阻塞。
以下是一个使用Qt和Android蓝牙模块实现简单数据收发的工程: main.cpp ```cpp #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtAndroidExtras> #include <QBluetoothDeviceDiscoveryAgent> #include <QBluetoothSocket> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QQmlApplicationEngine engine; qmlRegisterType<QBluetoothDeviceDiscoveryAgent>("Bluetooth", 1, 0, "BluetoothDeviceDiscoveryAgent"); qmlRegisterType<QBluetoothSocket>("Bluetooth", 1, 0, "BluetoothSocket"); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } ``` main.qml ```qml import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 import Bluetooth 1.0 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Bluetooth Demo") BluetoothDeviceDiscoveryAgent { id: discoveryAgent onDeviceDiscovered: { console.log("Discovered device: " + device.name + " (" + device.address + ")"); devicesListModel.append(device); } onFinished: { console.log("Discovery finished"); } onError: { console.log("Discovery error: " + error); } } BluetoothSocket { id: socket onStateChanged: { console.log("Socket state changed: " + state); } onReadyRead: { var data = socket.readAll(); console.log("Received data: " + data); } onError: { console.log("Socket error: " + error); } } ListView { id: devicesListView anchors.fill: parent model: devicesListModel delegate: Text { text: model.name + " (" + model.address + ")" onClicked: { socket.connectToService(model.address, "00001101-0000-1000-8000-00805F9B34FB"); } } } ListModel { id: devicesListModel } Button { text: "Discover devices" onClicked: { discoveryAgent.start(); } } Button { text: "Send data" onClicked: { socket.write("Hello, world!"); } } } ``` 这个工程实现了以下功能: 1. 发现附近的蓝牙设备; 2. 点击设备连接到设备的串行端口服务; 3. 从设备读取数据并在控制台上显示; 4. 发送数据到设备。 需要注意的是,由于Android蓝牙模块的限制,这个工程只能在Android设备上运行。如果要在其他平台上运行,需要使用其他的蓝牙模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值