Qt 談一談串列埠serialport

2021-09-27 02:23:29 字數 3427 閱讀 2477

最近一段時間在做有關串列埠通訊的qt專案,在ubuntu 和 window兩個平台上都有接觸。在這中秋佳節即將來臨之際,也得空寫點關於這方面的心得,算是乙個記錄筆記吧。

qt官方有關串列埠類的介紹,說的很明白,since: qt5.1,從5.1版本才引進的qserialport 類。

那麼要是qt5版本之前的平台要怎麼寫串列埠功能呢?

需要引入第三方qextserialport類,而這對於linux和window平台又有所不同。

在我們的專案中加入:

c檔案qextserialbase.cpp         標頭檔案qextserialbase.h

c檔案qextserialport.cpp          標頭檔案qextserialport.h,

c檔案win_qextserialport.cpp   標頭檔案win_qextserialport.h

使用時:

標頭檔案宣告類物件

qextserialport *mycom;

開啟並配置串列埠,舉例:

//選擇串口號

qstring portname = ui->portnamecombobox->currenttext();

mycom = new qextserialport(portname);

//串列埠資料讀取連線

connect(mycom, signal(readyread()), this, slot(readmycom()));

//設定波特率

mycom->setbaudrate((baudratetype)ui->baudratecombobox->currenttext().toint());

//設定資料位

mycom->setdatabits((databitstype)ui->databitscombobox->currenttext().toint());

//設定校驗位

switch(ui->paritycombobox->currentindex())

//設定停止位

switch(ui->stopbitscombobox->currentindex())

//設定資料流控制

mycom->setflowcontrol(flow_off);

//設定延時

mycom->settimeout(time_out);

//以可讀寫方式開啟串列埠

bool flag = mycom->open(qiodevice::readwrite);

稍有不同,需將win_qextserialport.cpp和win_qextserialport.h 換為 posix_qextserialport.cpp和posix_qextserialport.h。

用法類似。比如:

標頭檔案宣告:

posix_qextserialport *mycoma;

開啟和配置串列埠:

#ifdef arm

mycoma = new posix_qextserialport("/dev/ttymxc4", qextserialbase::polling);

#endif

#ifndef arm

mycoma = new posix_qextserialport("/dev/ttyusb1", qextserialbase::polling);

#endif

if(!mycoma->open(qiodevice::readwrite))

else

qdebug()<

mycoma->setbaudrate(baud57600);

// mycoma->setbaudrate(baud115200);

mycoma->setdatabits(data_8);

mycoma->setparity(par_none);

mycoma->setstopbits(stop_1);

mycoma->setflowcontrol(flow_off);

mycoma->settimeout(10);

這裡的條件編譯是方便我在ubuntu桌面平台和arm嵌入式板端除錯,請忽略。

**兩個平台不同之處:

1.兩種輪詢模式:

window平台下支援:qextserialport::polling //非同步讀寫   和   qextserialport::eventdriven //同步讀寫(接受到資料即讀取)

linux平台下只支援: qextserialport::polling //非同步讀寫(需要開定時器讀取)

2. 支援的波特率不同:

更多詳情請檢視:

qt官方引入了qserialport類,然後使用serialport時就方便多了,一般包括以下幾個步驟:

1. 專案檔案.pro,加入serialport模組:

qt += serialport
2. 自定義類標頭檔案,按自身需求加入官方庫,如:

#include #include
3. 使用時:

先頭檔案申明類物件:

qserialport *m_serialport;
後開啟和配置串列埠:

m_serialport = new qserialport("com3");

if(!m_serialport->open(qiodevice::readwrite))//readwrite 模式

else

qdebug()<

m_serialport->setbaudrate(qserialport::baud115200,qserialport::alldirections);

m_serialport->setdatabits(qserialport::data8); //資料位為8

m_serialport->setflowcontrol(qserialport::noflowcontrol); //無流控制

m_serialport->setparity(qserialport::noparity); //無校驗位

m_serialport->setstopbits(qserialport::onestop); //停止位1

談一談教育

今晚和研究生的師兄聊了會天,突然就說到教育的問題,有點感想,就寫下來,算是我對中國教育的一點看法吧。毫無疑問,中國的教育體制存在不少問題。在高中的時候或許還不是那麼明顯 對比起大學來說 上了大學,我才看清了我們教育的一些弊端。我覺得,最大的弊端,在於價值觀的引導問題上。不知道大家有沒和我一樣覺得當今...

談一談裁員

資本寒冬,經濟不景氣,要保持公司運作,可能會涉及到裁員。另外,有些員工的價值觀已經與公司不符,再留用可能會影響團隊和公司的和諧,此時也可能會涉及到裁員。裁員,不是說想裁就能裁的,需要考慮幾個方面 為什麼要裁?是否可以不裁?裁員是否會影響業務程序?裁員是否會付出經濟代價 賠償 裁員是否會負一定的法律責...

C 談一談this指標

當你進入乙個 房子 後,你可以看見桌子 椅子 地板等,但是房子你是看不到全貌了。對於乙個類的例項來說,你可以看到它的 成員函式 成員變數 但是例項本身呢?this是乙個 指標 它時時刻刻指向你這個 例項 本身class date void printdate 結果如下 進過反彙編,我們知道了 ecx...