2015-12-21 264 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