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