繁体   English   中英

无法将数据写入串行端口

[英]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()QBluetoothSocketconnected()信号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM