[英]Cannot write data to Serial Port
我正在尝试将数据写入串行端口。 我用这种方式:
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):
因此,没有任何内容写入那里。 看起来,该代码还可以,但是不起作用。 你能告诉我怎么了吗? 谢谢。
聚苯乙烯
我检查插座是否打开。 socket-> 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
您需要先将套接字连接到端点,然后才能成功编写任何内容。 您必须使用connectToService()
连接到某处正在运行的蓝牙服务。 发出connected()
信号后,您可以写入数据。
似乎QBluetoothSocket
没有像QAbstractSocket
及其子类那样具有waitForConnected()
函数。 这意味着您可以使用QSignalSpy
类的QSignalSpy
来等待connected()
信号,或者,如果您不太在乎效率,那么只需执行繁忙等待循环即可。
编辑:
正如评论中指出的那样,等待事件发生是Qt主事件循环的重点。 使用waitFor*
方法或其他事件循环效率很低,并且绝对违背了Qt的精神。 因此,仅在套接字连接后才写入数据的最佳解决方案是将writeData()
插槽connected()
到QBluetoothSocket
的connected()
信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.