問題現象:
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