0
我有一個用於與QSerialPort交互的類COMPort。當我從主線程創建exemplar這個類,然後我可以發送和接收數據和信號readyRead將被髮射。但是,當我嘗試從線程做出相同的信號時,readyRead將不會被髮射。信號readyRead沒有發射,當我從線程創建QSerialPort
void GetSN_Thread::run()
{
// Connect to serial port with default baudrate
serialPort = new COMPort();
if (!(serialPort->connectCOM(portName, DEFAULT_BAUDRATE)))
{
//Send signal -> Unable connect to this com port
emit showMsg("Unable to connect to " + portName + "\n");
return;
}
emit showMsg(portName + " connected" + "\n");
serialPort->write("Hello");
之後,我等待一個信號readyRead,但這並沒有發出。
當我從主線程做出這一點時,它都可以工作。
serialPort = new COMPort();
QString btlMsg= "";
if (serialPort->connectCOM(comName, comBR))
{
serialPort->write(COMMAND_START);
rcvThr = new ReceiveThread(serialPort, 4);
connect(rcvThr,SIGNAL(sendString(QString)), this, SLOT(msgHandler(QString)));
rcvThr->start();
}
和代碼相稱:
bool COMPort::connectCOM(QString name, int baudrate)
{
this->portName = name;
this->baudrate = baudrate;
connect(&serialPort, SIGNAL(readyRead()), this, SLOT(readDataCOM()));
serialPort.setPortName(this->portName);
serialPort.setDataBits(QSerialPort::Data8);
serialPort.setParity(serialPort.NoParity);
serialPort.setBaudRate((QSerialPort::BaudRate)this->baudrate);
serialPort.setStopBits(serialPort.OneStop);
serialPort.open(QIODevice::ReadWrite);
if (serialPort.isOpen())
return true;
else
return false;
}
方法讀取數據:
void COMPort::readDataCOM()
{
char chData;
while (serialPort.read(&chData,1))
{
queueMsg.append(chData);
}
}
顯示你的調試輸出+你的.h文件。 –