詳解 Qt 串口通信程序全程圖文 (5)
Qt 串口通信程序全程圖文是本文介紹的內容,本節也是最后一節,本節主要講述的是解決一下重要問題的說明:
(下面所說的第一個程序是指第一節中寫的那個程序,第二個程序是指第三節更改完后的程序,第三個程序是指第四節更改完后的程序。)
問題一:更改第一個程序中的代碼。
- struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
- myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);
這兩行代碼如果換為下面一行:
- myCom = new Win_QextSerialPort("com1",QextSerialBase::EventDriven);
你再運行一下程序,是不是還能用?那是說明我們的串口設置的結構體myComSetting沒有用嗎?你可以把上面的結構體里的波特率由9600改為115200,如果這個結構體有用,那么程序不可能再接收到數據,不過,你再運行一下程序,是這樣嗎?
如此看來,我們對串口進行的設置果真沒用,那默認的串口設置是什么呢?我們先看下一個問題。
問題二:同時打開第三個程序和第二個程序。
(注意:兩個程序的串口不能同時打開,所以打開一個程序的串口時要將另一個程序的串口關閉。)
我們先在第三個程序上按默認設置打開串口,發送數據1。然后關閉串口,在第二個程序上打開串口,發送數據1。可以看到兩個程序上接受到的信息都正確。如下圖。
我們關閉第二個程序上的串口,再將第三個程序上設置為奇校驗,然后打開串口,發送數據1,可以看到其收到的數據顯示亂碼。這時我們關閉第三個程序上的串口,打開第二個程序上的串口,發送數據1,你會驚奇地發現,它收到的信息也是亂碼。如下圖。
這到底是怎么回事呢?我們也可以去網上下載其他的串口助手進行實驗,也可以改變波特率進行實驗。由所有的結果得出的結論只能是:我們用那個結構體作為參數傳過去后,并沒有對串口進行設置,而程序運行使用的串口設置是系統以前保留的設置。那么,為什么會這樣呢?我們看下面的一個問題。
問題三:更改第三個程序中的代碼。
- myCom ->open(QIODevice::ReadWrite);
放到設置串口的語句之后,
- connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
這句之前,然后再運行程序。你會發現程序的串口設置功能已經不起作用了。現在知道原因了吧?!
其實,上面的三個問題是一個問題,它的結論是,寫串口程序時,要先打開串口再對它進行設置,不然設置就不會起作用。所以,這里應該說明,第一個和第二個程序都是不太正確的,正確的方法應該是像第三個程序一樣,先定義Win_QextSerialPort類對象,然后打開串口,再用那幾個設置函數對串口進行設置。
到這里,整篇文章就結束了。對于其中的一些問題也只是我個人的觀點,由于水平有限,所以理解上可能會有偏差,或者錯誤,還請廣大網友批評指正。我寫這篇文章的目的只是想讓Qt初學者能更輕松的用Qt寫出串口通信程序,及掌握Qt寫程序時的一些技巧。如果你從我的文章中學到了一個知識點,那么我的這篇文章就有它的意義了。
最后,如果你喜歡我的寫作風格,并且初學Qt,可以在我的空間查看Qt Creator系列教程,希望能對你的入門有所幫助。
到這里可以下載本文的PDF文檔:http://download.csdn.net/source/1763251
小結:關于Qt 串口通信程序全程圖文的內容本節介紹完了,希望本文對你有所幫助,關于串口的更多內容,請關注編輯推薦。(連載)