Qt 串口和線程的簡單結合(通過子線程操作串口、movetothread)


如果你也像我一樣,遇到了不知道如何正確的使用子線程去操作串口的問題,建議你看一下下面我的粗略見解,希望你能有所收獲。如有不正之處,希望指出。

創建一個帶UI的項目,添加Object類來對串口操作進行封裝。Object類中繼承QObject,可以在這個類中定義一些槽函數,例如初始化串口、打開串口、關閉串口的一些串口操作。

這里是我的Object中,初始化串口函數 

 1 void Object::InitSerialPortInfo()  2 {  3     qDebug()<<"Object Init threadId:"<<QThread::currentThreadId();  4     
 5     m_pSerial = new QSerialPort(this);  6     m_pSerial->setPortName("COM4");  7     m_pSerial->setBaudRate(QSerialPort::Baud115200);  8     m_pSerial->setDataBits(QSerialPort::Data8);  9     m_pSerial->setStopBits(QSerialPort::OneStop); 10     m_pSerial->setParity(QSerialPort::NoParity); 11 }

接下來就是在mainwindows構造Object類,同時構造一個QThread的子類,但是注意不要指定父對象(不要加this),

1     thread->quit(); 2     thread->wait(); 3     thread->deleteLater();

運行可以發現,mainwindow和Object的確沒有運行在同一個線程中。

最后,一些注意事項。

通過obj->movetothread(thread)並不是將Object中所有的函數都移動到子線程當中。只有通過槽函數連接的才在子線程中,你可以qDebug()其currentThreadId多試試。

剩余的對串口的一些讀取,操作就可以通過Qt的信號槽來實現了。是不是非常簡單呢。

覺得對你有幫助的可以點個贊,謝謝!


免責聲明!

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



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