我正在尝试将数据写入串行端口。我用这种方式:
QBluetoothSocket *socket;
socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
socket->open(QIODevice::WriteOnly);
QByteArray byteArr;
QDataStream out(&byteArr, QIODevice::WriteOnly);
out << 1 << '\n'; //if plusbutton is pushedm then send zero
socket.write(byteArr);
qDebug()<<socket.write(byteArr)<<endl;
但我得到了回报:
W / libA_for_w8.so(6443):( null):0((null)):qt.bluetooth.android: Socket :: writeData:QBluetoothSocket :: ConnectingState false
W / libA_for_w8.so(6443):( null):0((null)):qt.bluetooth.android: Socket :: writeData:QBluetoothSocket :: ConnectingState false
D / libA_for_w8.so(6443):.. \ A_for_w8 \ widget.cpp:68(void Widget :: on_plus_clicked()): - 1
D / libA_for_w8.so(6443):
所以,没有写到那里。 似乎代码还可以,但它不起作用。 你能告诉我什么是错的吗? 谢谢。
P.S。
我检查套接字是否打开。 socket-&gt; isOpen返回true,我得到: W / libA_for_w8.so(9638):( null):0((null)):qt.bluetooth.android:Socket :: writeData:QBluetoothSocket :: UnconnectedState false
D / libA_for_w8.so(9638):.. \ A_for_w8 \ widget.cpp:70(void Widget :: on_plus_clicked()): - 1
答案 0 :(得分:2)
您需要先将套接字连接到端点,然后才能成功写入任何内容。某处必须有正在运行的蓝牙服务,您可以使用connectToService()
连接到该服务。发出connected()
信号后,您可以写入数据。
QBluetoothSocket
似乎没有waitForConnected()
函数,QAbstractSocket
及其子类。这意味着您可以使用QSignalSpy
之类的东西来等待connected()
信号,或者,如果您不太关心效率,那么只需要一个繁忙的等待循环。
编辑:
正如评论中指出的那样,等待事件发生是Qt主要事件循环的重点。使用waitFor*
方法或其他事件循环是非常低效的,并且肯定违背Qt的精神。因此,仅在连接套接字后写入数据的最佳解决方案是将writeData()
个插槽连接到connected()
QBluetoothSocket
信号。