最近一段時間在做有關串列埠通訊的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...