QextSerialPort 小記

  • 每一個在Qt下用過串口的同仁應該都對 QextSerialPort 這個第三方類不會感覺陌生。

    http://code.google.com/r/dbzhang800-qextserialport/ 的代碼已經合併到主倉庫,QextSerialPort-1.2beta1 即將發佈,感謝大家關注。 2012.03.16

歷史

QextSerialPort 原作者是 Stefan Sander,後來 Michal Policht、 Brandon Fosdick、Liam Staskawicz 均對該庫做了大量改進工作。

資料顯示:

  • 第一個公開版本 Version 0.1 發佈於 2000年12月
  • 軟件倉庫中的最早的版本 Version 0.8 發佈於 2004年12月
  • 2009年5月,Liam Staskawicz 將倉庫轉到

clones

 http://code.google.com 可見:

已有幾十人創建了QextSerialPort倉庫的克隆(儘管多數都沒有什麼更新)。

其他串口類

QSerialDevice

這是俄羅斯的 Денис Шиенков 於2009年7月創建的一個串口類。它提供了QextSerialPort外的另一個選擇。

起源:由於QextSerialPort長期沒有更新,Денис Шиенков嘗試對其重構,但最終發現——如果按照他的想法對代碼進行修改,由於改動過大,那麼修改後的版本將不再是 QextSerialPort。於是,他在此基礎上另其爐竈,創建了 QSerialDevice

倉庫早期地址:http://fireforge.net/projects/qserialdevice/

後來轉到:https://gitorious.org/qserialdevice

(已有30多人創建了該倉庫的克隆)

QSerialPort

倉庫地址:https://gitorious.org/inbiza-labs/qserialport

這是2010年9月份創建的一個串口庫。

(我沒找到該類的起源的更詳細的信息,而且該類更新並不及時,最後一次更新在2010年的11月,但也有10多人創建的克隆)

問題

QextSerialPort目前存在不少問題:

  • 授權問題:

google code 中顯示的 New BSD License 實不不對的,因爲當時倉庫轉移的時候,必須選擇一個開源的協議,Liam Staskawicz 就隨便選了一個。直到今年(2011)的9月底,大家似乎才達成一致,採用 MIT 協議。但倉庫一直以來(從2010年2月)都沒有更新

  • 代碼架構:

QextSerialPort,儘管幾經修改,但現在的結構,似乎比2007年之前的結構還亂。

  • 例子:

QextSerialPort自帶的例子在某些平臺下都無法編譯(比如MinGW下或VS2008下),這一點是我最無法忍受的。

  • XX:

....

嘗試重構

在保持源碼兼容性的基礎上,對代碼進行了一些重構:

倉庫:http://code.google.com/r/dbzhang800-qextserialport/

主要改動

  • 使用 D-pointer 和 Q_PRIVATE_SLOT 將私有的成員變量、成員函數 從 QextSerialPort 移動到了 QextSerialPortPrivate 中。

  • 使用 Qt自帶的 qdoc3 而不是 doxygen 來作爲文檔生成工具
  • 在所有源文件頭部添加 MIT 授權信息
  • 嘗試添加一個私有類 QextWinEventNotifier,當用戶安裝的是不帶有Qt私有文件的SDK時,這個私有類可以自動起作用(替代QWinEventNotifier)[這只是權宜之計,在Qt5中,應該可以讓QWinEventNotifier變成公有類,在Qt4.8中,看來是來不及了]。

用法

QextSerialPort 針對qmake做了不少的改進。當使用這個類時,只需要下載所有源碼,然後放置到任意目錄(一般會是項目中的3rdParty目錄)

然後在項目的.pro文件內添加:

include(YourPathToPri/qextserialport.pri)

即可。

除了以源碼形式直接整合到項目中,我們可能更喜歡使用動態庫或靜態庫。

此時,我們只要在 qextserialport.pro 的同級目錄下創建 config.pri 文件(參考config_example.pri文件)

# uncomment the following line if you want to use qextserialport as library
# QEXTSERIALPORT_LIBRARY = yes

# uncomment the following line too if you want to use it as static library
# QEXTSERIALPORT_STATIC = yes

然後在 buildlib 目錄下運行

qmake 
make

即可得到動態庫或靜態庫。剩下的就和直接包含源碼一樣了,在項目中直接包含qextsrialport.pri即可(它會自動找到動態庫或靜態庫的路徑和名字)。

補充一點

似乎國內不少人使用第三方庫時,會直接將源碼直接拷貝到項目的源碼目錄中,然後自己將其加入.pro文件內。

儘管這種方法從維護的角度看非常不好,但是最後還是決定提供了該功能:只要將倉庫src目錄下的所有.cpp/.h和qextsrialport.pri一塊拷貝到你的某個目錄中,然後在.pro內直接include 該.pri即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章