古詩詞大全網 - 團隊口號 - 如何在QT中讀取串口數據

如何在QT中讀取串口數據

壹、文件下載

文件下載地址:

也可以下載我上傳到網盤上的:

二、文件內容介紹

1.下載到的文件為qextserialport-1.2win-alpha ,解壓並打開後其內容如下。

(點擊圖片可以查看清晰大圖)

下面分別介紹:

(1)doc文件夾中的文件內容是QextSerialPort類和QextBaseType的簡單的說明,我們可以使用記事本程序將它們打開。

(2)examples文件夾中是幾個例子程序,可以看壹下它的源碼,不過想運行它們好像會出很多問題啊。

(3)html文件夾中是QextSerialPort類的使用文檔。

(4)然後就是剩下的幾個文件了。其中qextserialenumerator.cpp及qextserialenumerator.h文件中定

義的QextSerialEnumerator類是用來獲取平臺上可用的串口信息的。不過,這個類好像並不怎麽好用,而且它不是我們關註的重點,所以下面

就不再介紹它了。

(5)qextserialbase.cpp和qextserialbase.h文件定義了壹個QextSerialBase

類,win_qextserialport.cpp和win_qextserialport.h文件定義了壹個Win_QextSerialPort

類,posix_qextserialport.cpp和posix_qextserialport.h文件定義了壹個

Posix_QextSerialPort類,qextserialport.cpp和qextserialport.h文件定義了壹個

QextSerialPort類。這個QextSerialPort類就是我們上面所說的那個,它是所有這些類的子類,是最高的抽象,它屏蔽了平臺特征,

使得在任何平臺上都可以使用它。

2.幾個類的簡單介紹。

下面是這幾個類的關系圖。

可以看到它們都繼承自QIODevice類,所以該類的壹些函數我們也可以直接來使用。圖中還有壹個QextBaseType類,其實它只是壹個標

識,沒有具體的內容,它用來表示Win_QextSerialPort或Posix_QextSerialPort

中的壹個類,因為在QextSerialPort類中使用了條件編譯,所以QextSerialPort類既可以繼承自

Win_QextSerialPort類,也可以繼承自Posix_QextSerialPort類,所以使用了QextBaseType來表示。這壹點

我們可以在qextserialport.h文件中看到。再說QextSerialPort類,其實它只是為了方便程序的跨平臺編譯,使用它可以在不同的

平臺上,根據不同的條件編譯繼承不同的類。所以它只是壹個抽象,提供了幾個構造函數而已,並沒有具體的內容。在qextserialport.h文件中的

條件編譯內容如下:

#ifdef_TTY_POSIX_

#include“posix_qextserialport.h”

#define QextBaseTypePosix_QextSerialPort

#else

#include“win_qextserialport.h”

#define QextBaseTypeWin_QextSerialPort

#endif

所以,其實我們沒有必要使用這個類,直接使用Win_QextSerialPort或Posix_QextSerialPort就可以了。當然如果

妳想使用這個類,實現同樣的源程序可以直接在Windows和Linux下編譯運行,那麽壹定要註意在Linux下這裏需要添加

#define _TTY_POSIX_ 。而我們這裏為了使得程序更明了,所以沒有使用該類,下面也就不再介紹它了。

QextSerialBase類繼承自QIODevice類,它提供了操作串口所必需的壹些變量和函數等,而

Win_QextSerialPort和Posix_QextSerialPort均繼承自QextSerialBase

類,Win_QextSerialPort類添加了Windows平臺下操作串口的壹些功能,Posix_QextSerialPort類添加了

Linux平臺下操作串口的壹些功能。所以說,在Windows下我們使用Win_QextSerialPort類,在Linux下我們使用

Posix_QextSerialPort類。

3.在QextSerialBase類中還涉及到了壹個枚舉變量QueryMode。

它有兩個值Polling和EventDriven

。QueryMode指的是讀取串口的方式,下面我們稱為查詢模式,我們將Polling稱為查詢方式Polling,將EventDriven稱為事件驅動方式。

事件驅動方式EventDriven就是使用事件處理串口的讀取,壹旦有數據到來,就會發出readyRead()信號,我們可以關聯該信號來讀取串口的數據。在事件驅動的方式下,串口的讀寫是異步的,調用讀寫函數會立即返回,它們不會凍結調用線程。

而查詢方式Polling則不同,讀寫函數是同步執行的,信號不能工作在這種模式下,而且有些功能也無法實現。但是這種模式下的開銷較小。我們需要自己建立定時器來讀取串口的數據。

在Windows下支持以上兩種模式,而在Linux下只支持Polling模式。

三、小結。

這裏講了這麽多,最後要說的只是,我們在Qt中使用這個類編寫串口程序,根據平臺的不同只需要分別使用四個文件。