问题现象:
m_serialPort->write()//这句正常
connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(slot_receiveInfo()));//整死都没有进入槽里面
描述:
Qt5.1开始,开发串口应用使用的是QSerialPort和QSerialPortInfo。网上很多例程,但是基本都是windows平台,基于linux平台的串口较少,但区别又不大。这次遇到一个小坑,QSerialPort的应用在windows使用正常,但是移植到linux平台,就是接收不了数据。示波器发现我每写一次串口,串口也回了数据,说明QSerialPort的写是没问题的,但是就是readyRead信号触发不了,一次也不能!改用纯linuxC平台的串口方式就读写数据正常。在一个群里问了些大佬,竟然有说QSerialPort移植到linux正常跑过的,也有遇到我这个问题的。估计跟linux有关系。所以这句代码:
在windows是没问题的,理应在linux平台使用QSerialPort和QSerialPortInfo的话,读取部分得修改为不断去m_serialPort->readAll()。结果,也不行!!!通过示波器发现write正常,串口也返回了数据。额,等于轮训去read也不行。无奈抛弃QSerialPort方式,换成其他串口开发方式。
其他
1.Qt开发串口方式:①QSerialPort ②Posix_QextSerialPort ③linuxC的文件描述符方式
示例代码
关键代码:
/*
@ 该串口方法是三方插件Posix_QextSerialPort 方法
@ Bluetooth是自定义类
@ 串口读、写在同一个分离的线程里
*/
//蓝牙串口线程
BLE_COM = new Bluetooth(QString("/dev/ttySGK1"),QIODevice::ReadWrite,BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF);
/*绑定读取串口槽*/
connect(BLE_COM,SIGNAL(signal_readFromSerial(QByteArray)),this,SLOT(slot_test_readFromSerial(QByteArray)));
//往蓝牙模块写指令
emit BLE_COM->signal_writeToSerial("AT+GVERS\r\n");
Qt的使用方式:
#添加子模块
include ($$PWD/Bluetooth_com/Bluetooth_com.pri)
//包含头文件
#include “Bluetooth_com/serialportwidget.h”
资源下载
Bluetooth_com.tar.gz