无法向串口写入数据

Cannot write data to Serial Port

本文关键字:数据 串口      更新时间:2023-10-16

我正在尝试将数据写入串口。我这样使用:

 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。所以(6443):(null):0 ((null)): qt.bluetooth.android:Socket::writeData: QBluetoothSocket::ConnectingState false

W/libA_for_w8。所以(6443):(null):0 ((null)): qt.bluetooth.android:Socket::writeData: QBluetoothSocket::ConnectingState false

D/libA_for_w8。所以(6443):. . A_for_w8 widget.cpp: 68(空隙小部件:on_plus_clicked ()): 1

D/libA_for_w8。因此,(6443):

所以这里没有写入任何内容。看起来,代码是好的,但它不能工作。你能告诉我怎么了吗?谢谢你!

公立小学

我检查套接字是否打开。socket->isOpen返回true,我得到:W/libA_for_w8。so(9638): (null):0 ((null)): qt.bluetooth.android: Socket::writeData: QBluetoothSocket::UnconnectedState false

D/libA_for_w8。所以(9638):. . A_for_w8 widget.cpp: 70(空隙小部件:on_plus_clicked ()): 1

在成功编写任何内容之前,需要将套接字连接到端点。某处一定有一个正在运行的蓝牙服务,您可以使用connectToService()连接到它。connected()信号发出后,就可以写数据了。

QBluetoothSocket不像QAbstractSocket及其子类那样具有waitForConnected()函数。这意味着你可以使用QSignalSpy之类的东西来等待connected()信号,或者,如果你不太关心效率,只需要一个忙碌等待循环就可以了。

编辑:

正如在评论中指出的,等待事件发生是Qt主事件循环的全部意义。使用waitFor*方法或其他事件循环是非常低效的,并且绝对违背了Qt的精神,所以最好的解决方案是在套接字连接后才写入数据,将writeData()插槽连接到QBluetoothSocketconnected()信号。