Qt編寫串列埠通訊程式全程圖文講解(二)
上一篇文章中已經介紹了實現最簡單的串列埠接收程式的編寫,這篇將對程式內容進行分析。
1.首先應說明操作串列埠的流程。
步驟一:設定串列埠引數,如:波特率,資料位,奇偶校驗,停止位,資料流控制等。
步驟二:選擇串列埠,如windows下的串列埠1為“com1”,Linux下為“ttyS0”等。
步驟三:讀或寫串列埠。
步驟四:關閉串列埠。
(我們上一個程式沒有寫串列埠和關閉串列埠的功能,開啟串列埠也是在建構函式裡完成的,因為那只是為了用最簡單的方法完成串列埠程式的編寫。在以後的文章裡我們將會對它進行修改和完善。)
2.下面我們將按照上面的操作串列埠的流程,講解第一個程式的編寫。
第一,我們在寫程式之前,應該瀏覽一下那6個檔案,大概看一下它們裡面都是什麼內容,各個檔案各個類之間有什麼聯絡。在win_qextserialport.cpp檔案中,我們看它的最後一個建構函式,會發現,串列埠可以在這裡進行初始化。
Win_QextSerialPort::Win_QextSerialPort(const QString & name, const PortSettings& settings, QextSerialBase::QueryMode mode) {
Win_Handle=INVALID_HANDLE_VALUE;
setPortName(name);
setBaudRate(settings.BaudRate);
setDataBits(settings.DataBits);
setStopBits(settings.StopBits);
setParity(settings.Parity);
setFlowControl(settings.FlowControl);
setTimeout(settings.Timeout_Millisec);
setQueryMode(mode);
init();
}
它共有三個引數,其中第一個引數const QString & name,應該是串列埠的名字,是QString型別,我們可以用串列埠1即“com1”,不用過多說明。下面我們主要研究第二個和第三個引數。
第二,我們檢視第二個引數的位置。
在Qt Creator的選單中選擇Edit->Find/Replace->All projects,如下圖。
在彈出的對話方塊中輸入要查詢的內容PortSettings,如下圖。
點選Search後,便能在下面顯示出整個工程中所有PortSettings的位置。如下圖。
我們點選第一條,可以看到在qextserialbase.h檔案中有一個struct PortSettings,如下圖。
我們雙擊這一條,進入相應的檔案。如下圖。
struct PortSettings
{
BaudRateType BaudRate;
DataBitsType DataBits;
ParityType Parity;
StopBitsType StopBits;
FlowType FlowControl;
long Timeout_Millisec;
};
可以看到在這個結構體裡定義了串列埠初始化的各個引數,而對於BaudRateType等型別的定義,我們在這個結構體的上面可以看到,它們是多個列舉變數。如下圖。
這時我們便應該明白了,這個結構體便是實現串列埠引數設定的。
第三,定義串列埠引數。
BaudRateType BaudRate;
波特率設定,我們設定為9600,即程式中用BAUD9600;
DataBitsType DataBits;
資料位設定,我們設定為8位資料位,即DATA_8;
ParityType Parity;
奇偶校驗設定,我們設定為無校驗,即PAR_NONE;
StopBitsType StopBits;
停止位設定,我們設定為1位停止位,即STOP_1;
FlowType FlowControl;
資料流控制設定,我們設定為無資料流控制,即FLOW_OFF;
long Timeout_Millisec;
延時設定,我們設定為延時500ms,即500;
這樣便寫出了程式中的那句:
struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
我們定義了一個結構體變數myComSetting,並對其進行了初始化。
第四,設定第三個引數。
我們先按上面的方法找到它的定義位置,在qextserialbase.h中,如下圖。
可以看到查詢模式也是列舉變數,有兩個選項,我們選擇第二個EventDriven,事件驅動。
到這裡,我們就可以定義Win_QextSerialPort類的變數了,就是那句:
myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);
它完成了串列埠的選擇和串列埠的初始化。
第五,寫開啟串列埠函式和讀串列埠函式。
檢視win_qextserialport.h檔案,我們會發現Win_QextSerialPort類繼承自QextSerialBase類。
檢視qextserialbase.h檔案,我們會發現QextSerialBase類繼承自QIODevice 類。
我們在Qt的幫助中檢視QIODevice 類,如下圖。
其部分內容如下圖。可以看到其中有enum OpenModeFlag { NotOpen, ReadOnly, WriteOnly, ReadWrite, ..., Unbuffered },virtual bool open ( OpenMode mode ),QByteArray readAll ()等內容。
而下面的訊號函式中有void readyRead ();它可以檢視串列埠是否有新的資料傳來。
所以,我們可以用這個類裡的這些函式操作串列埠。
如程式中的語句:
myCom ->open(QIODevice::ReadWrite);
//我們呼叫了其中的open函式,用ReadWrite可讀寫的方式進行開啟串列埠;
connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
//我們關聯訊號readyRead(),和自己寫的槽函式readMyCom(),當串列埠有資料傳來時進行讀串列埠操作。
void MainWindow::readMyCom() //自己寫的讀串列埠函式
{
QByteArray temp = myCom->readAll();
//我們呼叫readAll()函式,讀取串列埠中所有資料,在上面可以看到其返回值是QByteArray型別。
ui->textBrowser->insertPlainText(temp);
//呼叫insertPlainText()函式,是視窗上的文字瀏覽器中連續輸出資料,而不是每次寫資料前都清除以前的
//資料,可以在Qt的幫助裡檢視這個函式的說明
}
這樣我們便寫完了所有的語句,最後只需要在mainwindow.h檔案中加入相應的標頭檔案,物件宣告,函式宣告即可。
這裡需要說明的是我們一定要學會檢視檔案和使用幫助文件,將我們不懂得知識一點一點搞明白。
在下一篇中我們將會加入“開啟串列埠”,“關閉串列埠”,“傳送資料”三個按鈕,將整個程式進行完善。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/lbsljn/archive/2009/12/13/4994826.aspx
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-662975/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Qt編寫串列埠通訊程式全程圖文講解(一)QT串列埠
- VC控制元件MSComm編寫串列埠通訊程式控制元件串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- 串列埠通訊串列埠
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- 串列埠通訊 (轉)串列埠
- 串列埠通訊應用程式的解決方案 (轉)串列埠
- C#串列埠通訊程式SerialPort類C#串列埠
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- ROS環境下串列埠通訊ROS串列埠
- Android藍芽串列埠通訊Android藍芽串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 小型plc串列埠通訊簡介串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- 詳解linux下的串列埠通訊開發Linux串列埠
- 用C#一步步寫串列埠通訊C#串列埠
- 百度識別例程-QT介面-識別列表-串列埠通訊-文字影像QT串列埠
- 迪文屏OS彙編程式碼開發-串列埠篇串列埠
- 【GMT43智慧液晶模組】例程二:串列埠通訊實驗串列埠
- STM32串列埠通訊串列埠
- C#串列埠通訊遇到的坑C#串列埠
- android ndk 虛擬串列埠通訊Android串列埠
- 用VB除錯串列埠通訊 (轉)除錯串列埠
- .NET Compact Framework下的串列埠通訊Framework串列埠