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文件。 –