-
每一個在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月
- 該倉庫中最近的一個發佈版是 Version 1.2win-alpha,發佈於 2007年9月
- 2009年5月,Liam Staskawicz 將倉庫轉到
- 倉庫中最後一次更新是在2010年2月
- 至今,Version 1.2 發佈仍遙遙無期
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即可。