施 菊, 張 慶, 趙 冰
(上海無線電設(shè)備研究所,上海200090)
Qt是一個跨平臺的C++應(yīng)用構(gòu)架,擁有直觀、強大的API(應(yīng)用程序編程接口),在通信控制器、自動化電路設(shè)計系統(tǒng)、金融服務(wù)等方面應(yīng)用廣泛。Qt支持以下平臺:MS/Widows、UNIX/X11-Linux、HP-UX、Digital Unix 等。目前在商業(yè)領(lǐng)域,Qt是目前最通用流行的Gui,與其它Gui相比,具有良好的封裝機制,結(jié)構(gòu)小巧,模塊化程度高,可重用性較好,無論在移植性、應(yīng)用程序,還是技術(shù)支持等方面都略勝一籌。
Qt在工業(yè)領(lǐng)域控制界面方面占有越來越重要的地位。本文結(jié)合深圳華天正公司Real6410的ARM11開發(fā)套件,詳細介紹了Linux環(huán)境為前提的Qt Gui開發(fā)環(huán)境的搭建,軟件開發(fā)過程及其如何移植等問題。與傳統(tǒng)控制界面設(shè)計方式相比,Qt Gui還具有系統(tǒng)可靠性增強、開發(fā)時間縮短、系統(tǒng)升級維護方便等優(yōu)勢,具有強大的發(fā)展?jié)摿Α?/p>
本文介紹的Qt 開發(fā)硬件環(huán)境包括了ARM11開發(fā)套件、PC機一臺。選擇在Windows操作系統(tǒng)下通過VMware虛擬機安裝Linux操作系統(tǒng),并配置NFS等服務(wù)功能。目前Linux操作系統(tǒng)版本較多,主要有Ubuntu和RedHat等,相比較而言,Ubuntu操作界面更為人性化、庫升級方便,因此采用Ubuntu 10版本。
進行Qt應(yīng)用程序的開發(fā),首先需要準備好arm-none-linux-gnueabi交叉編譯器、QtCreator和最新的Qt源碼包。在Linux 平臺下,安裝交叉編譯器為開發(fā)板編譯內(nèi)核。Qt應(yīng)用程序也需要交叉編譯后,才能移植到ARM 平臺上。
Qt Creator是NOKIA 公司最新推出的Qt開發(fā)工具,與Qt Desiger等相比,它功能集成度更高,無須再單獨安裝qvfb、zlib等配套軟件,程序開發(fā)和交叉編譯功能自成一體,交叉編譯完成后可直接下載到ARM。Qt針對不同的開發(fā)對象提供很多種源碼包,如Qtopia、Qt/Embedded等,本文并不需要開發(fā)圖形系統(tǒng),只是針對特定工業(yè)控制要求開發(fā)相應(yīng)的控制界面,因此采用Qt/everywhere源碼包,對源碼包進行交叉編譯后即可進行使用。
ARM 開發(fā)套件主要準備工作流程如圖1所示,可以根據(jù)需要對內(nèi)核進行定制,對文件系統(tǒng)進行裁減。
圖1 準備工作流程圖
平臺搭建完成后,就可以根據(jù)需要開發(fā)嵌入式GUI程序,使用Qt Creator開發(fā)流程簡單高效,具體流程圖如圖2所示。
圖2 Qt程序開發(fā)流程
在開發(fā)過程中,設(shè)置Qt Creator交叉編譯工具,將gcc改為arm-linux-gcc,選擇交叉編譯后的qmake,將交叉編譯后生成文件的地址選擇為ARM 可直接掛載地址。于是開發(fā)中可以省略在PC機上交叉編譯運行這一流程,直接對編寫的代碼進行交叉編譯。裁減掉ARM 文件系統(tǒng)中不需要的部分內(nèi)容,同時使其不要上電加載Qtopia等應(yīng)用程序。這樣便可以將交叉編譯后的應(yīng)用程序下載到ARM 實時調(diào)試,不用在本機編譯與交叉編譯中不斷切換,也不用手動編寫Makefile文件,縮短開發(fā)流程。
Qt提供了一款專門用于用戶圖形界面設(shè)計的工具Qt Creator,具有強大的布局功能,既可以專門設(shè)計GUI,又可以利用它提供的集成功能,用于整個程序的開發(fā)。Qt的界面既可以通過GUI窗口中現(xiàn)有部件的選擇排列而成,也可以通過C++編寫完成。按照Qt開發(fā)流程,設(shè)計了一款用于實時監(jiān)控的GUI界面,界面框架如圖3所示。
圖3 界面程序框架圖
串口1為調(diào)試串口,串口2為RS232,串口3為GPS串口,串口4待用;另外還在本界面上開通了網(wǎng)絡(luò)模塊、鍵盤模塊、定時器、音頻和影像播放模塊等。
信號和槽機制是Qt的核心機制,是一種功能強大的對象間通信機制,極為靈活,完全面向?qū)ο?,為對象之間的通信提供了便利條件。槽用于接收信號,一個槽并不知道是否有信號與自己相連??梢詫⑷我庖粋€信號與任意一個槽相連接,甚至于將一個信號與另一個信號相連。信號與槽構(gòu)造了一個強大的部件編程機制,取代了以往老舊的、缺乏安全性的回調(diào)技術(shù)。通過信號與槽,實現(xiàn)了各個模塊之間的有效通信。
將開發(fā)完成的程序交叉編譯后下載至ARM開發(fā)板,運行程序,如圖4所示。
圖4界面為串口接收數(shù)據(jù)頁面,當open按鈕按下時,ARM 上所有端口被打開??山尤腈I盤對ARM 進行操作,也可以通過觸摸屏對ARM進行控制,此界面同時具有實時存儲數(shù)據(jù)功能,把數(shù)據(jù)存儲到文件系統(tǒng)根目錄下,為以后進行數(shù)據(jù)分析提供依據(jù)。界面右側(cè)為端口數(shù)據(jù)顯示界面,主要用于實時監(jiān)測各個端口數(shù)據(jù),點擊Net按鈕進入網(wǎng)絡(luò)數(shù)據(jù)接收頁面,點擊GPS按鈕進入GPS數(shù)據(jù)接收頁面,點擊Local按鈕進入本地數(shù)據(jù)頁面,點擊Help 進入本界面使用說明頁面。左側(cè)為圖形數(shù)據(jù)界面,根據(jù)接收數(shù)據(jù)實時繪制圖形,并將某些數(shù)據(jù)在圖形上滾動顯示。如果端口數(shù)據(jù)出現(xiàn)錯誤,此Qt GUI還可根據(jù)錯誤的種類給ARM發(fā)出不同的警告信息,ARM 發(fā)出相應(yīng)的報警聲。
圖4 QT 界面圖
本文講述了Qt開發(fā)環(huán)境的搭建和應(yīng)用。使用Qt開發(fā)GUI,能快速的開發(fā)應(yīng)用程序,連接數(shù)據(jù)庫也非常方便快捷,界面控件元素十分豐富,能滿足各種應(yīng)用需求。Qt一直以來為開發(fā)人員提供完整的文檔和工具,提供最為完整的平臺支持。因此,Qt在GUI程序開發(fā)領(lǐng)域有著良好的應(yīng)用前景。
[1] Jasmin Blanchette,Mark Summerfield.C++ GUI Programming with Qt4,Second Edition[M].2008.
[2] 李朱峰.Linux2.6 嵌入式系統(tǒng)開發(fā)與實踐[M].北京:北京航空航天大學(xué)出版社,2010.
[3] 劉淼.嵌入式系統(tǒng)接口設(shè)計與Linux驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[4] 穆煜.嵌入式應(yīng)用程序設(shè)計[M].北京:人民郵電出版社,2009.