Qt QSerialPort串口 接收數據 QIODevice::readyRead()


QSerialPort 負責具體的串口操作。選定串口后,要先打開串口,才能設置波特率等參數。這些參數都設置好了就可以使用了。最基本的操作無非是read() 和 write()。需要注意的是這兩個操作都是非阻塞的

另外有一個重要的signal 也需要用到,那就是 void QIODevice::readyRead()

每次串口收到數據后都會發出這個signal。我們的程序中需要定義一個slot,並將其與這個signal 相連接。這樣,每次新數據到來后,我們就可以在slot中讀取數據了。這時一定要將串口緩沖區中的數據全部讀出來,可以利用readAll() 來實現。

下面的代碼片段給出了設置串口的例子:

m_reader.setPort(info);
if(m_reader.open(QIODevice::ReadWrite))
{
        qDebug() << "m_reader.open(QIODevice::ReadWrite)";
        m_reader.setBaudRate(QSerialPort::Baud9600);
        m_reader.setParity(QSerialPort::NoParity);
        m_reader.setDataBits(QSerialPort::Data8);
        m_reader.setStopBits(QSerialPort::OneStop);
        m_reader.setFlowControl(QSerialPort::NoFlowControl);

        m_reader.clearError();
        m_reader.clear();
        connect(&m_reader, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
}


void Dialog::readyReadSlot()
{
    qDebug() << "x";
    QByteArray arr = m_reader.readAll();
    do_something(arr);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM