2015-12-21 265 views
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); 
    } 
} 
+0

显示你的调试输出+你的.h文件。 –

回答

-2

一切好......但如果是信号发射?我没有看到代码中的任何地方发射readyRead();并没有连接showMsg();信号。

+0

信号readyRead()将在QSeriaPort中被命名 – Sauber