嵌入式linux圖形用戶接口(模板)



單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,第6章,嵌入式linux圖形用戶接口,第六章 嵌入式linux圖形用戶接口,本章主要講述嵌入式,Linux,圖形用戶界面(,GUI,,,Graphic User Interface,)的有關內(nèi)容,即嵌入式,GUI,本章首先簡單介紹嵌入式,GUI,的相關內(nèi)容;之后以,Qt,為例詳細介紹其移植和編程操作;最后詳細介紹基于,QTE,的,Qtopia,平臺的移植和編程操作GUI,編程能夠提高操作的人性化,優(yōu)化產(chǎn)品性能,減輕用戶認知負擔,使程序更適合用戶的操作需求主要內(nèi)容,第一節(jié),嵌入式,GUI,簡介,第二節(jié),嵌入式,GUI Qt,第三節(jié),基于,Qt,技術的,Qtopia,內(nèi)容:,隨著嵌入式系統(tǒng)的廣泛應用,PDA、機頂盒、DVD/VCD播放機及WAP手機等嵌入式設備已經(jīng)迅速普及,這些設備同時應該擁有華麗美觀、易于操作的圖形用戶界面因此,在嵌入式系統(tǒng)中,特別是在一些消費類產(chǎn)品中,也逐漸出現(xiàn)了圖形用戶界面(GUI),一、嵌入式GUI的特點,二、嵌入式GUI的種類,第一節(jié) 嵌入式GUI簡介,嵌入式系統(tǒng)一般不會建立在龐大的操作系統(tǒng)以及GUI之上,比如Windows或X Window,它們對實時性的要求非常高,對GUI的要求也更高。
而且,嵌入式系統(tǒng)往往是一種定制設備,對GUI的需求各不相同,有些系統(tǒng)只要求一些圖形功能,而有些系統(tǒng)則要求完備的GUI支持,因此,GUI也必須是可定制的由于受到當前嵌入式系統(tǒng)本身特點的影響,并受其發(fā)展限制,所以嵌入式系統(tǒng)中的GUI應該有如下特點:,占用的存儲空間以及運行時占用資源少運行速度以及響應速度快可靠性高便于移植和定制第一節(jié) 嵌入式GUI簡介 一、嵌入式GUI的特點,目前,常用的嵌入式GUI系統(tǒng)有QT/Embedded、MicroWindows、MiniGUI和OenGUI等下面對這幾種常用的系統(tǒng)做一下簡單介紹1.QT/Embedded,QT/Embedded是著名的QT庫開發(fā)商TrollTech開發(fā)的基于FrameBuffer、面向嵌入式系統(tǒng)的QT版本它的主要特點是界面美觀、色彩配比好,使用與QT/Windows和QT/X11完全一致的API接口,許多基于QT的程序可以非常方便地移植到嵌入式系統(tǒng);同時它具有豐富的模塊,用戶可以根據(jù)需要選擇QT/Embedded的特性集合QT/Embedded實現(xiàn)了對下層輸入設備的驅(qū)動和底層圖形接口以及各基類和API不過,QT/Embedded對于系統(tǒng)資源的要求非常高,運行時需要較大的存儲空間和運行空間;而且它是基于C+實現(xiàn)的,而這種C+接口對于嵌入式系統(tǒng)中的某些應用來說顯得比較臃腫。
第一節(jié) 嵌入式GUI簡介,二、嵌入式GUI的種類,2.MicroWindows,Microwindows是由美國CenturySoftware公司開發(fā)的開放源碼的嵌入式GUI項目它不需要其他圖形系統(tǒng)的支持,可以充分利用Linux提供的Framebuffer機制來進行圖形顯示同時在底層提供了對多種芯片的支持,并基本上用C語言實現(xiàn),因此移植性較強Microwindows支持兩種API:ECMAAPIW(類Win32API)和Nano-XAPIs這些API對Win32和XWindow系統(tǒng)有很好的兼容性,使程序可以很容易地從其他系統(tǒng)上移植過來由于MicroWindows為了與XWindow的兼容,采用了傳統(tǒng)的基于UNIXSocket的客戶端/服務器結(jié)構(gòu)此是,客戶端的畫圖、窗口建立等操作都是通過套接字與服務器通信在這種情況下,系統(tǒng)就非常依賴于UNIXSocket,而UNIXSocket的傳遞需要通過內(nèi)核,這在一些對實時性要求比較高的系統(tǒng)里就不太有利而且,Microwindows基本上是用C語言實現(xiàn)的,雖然增強了可移植性,但也導致了系統(tǒng)的運行效率不高第一節(jié) 嵌入式GUI簡介,二、嵌入式GUI的種類,3.MiniGUI,MiniGUI是我國國內(nèi)自主開發(fā)、比較成熟的一個圖形用戶界面系統(tǒng),面向基于Linux的實時嵌入式系統(tǒng),使用現(xiàn)有成熟的圖形引擎(SV2GALib/LibGGI),采用類似WinCE的線程機制(目前MiniGUILite版本改用微客戶端/服務器模式來提供對多進程的支持),集成了多字體和多字符集,支持硬件加速能力,充分利用顯示內(nèi)存。
MiniGUI利用線程之間的同步操作,實現(xiàn)了客戶線程和服務線程之間的微客戶端/服務器結(jié)構(gòu),因為它的客戶和服務器是同一進程的兩個不同線程它的核心實現(xiàn)主要體現(xiàn)在消息隊列數(shù)據(jù)結(jié)構(gòu)的使用上4.OpenGUI,OpenGUI在Linux系統(tǒng)上已經(jīng)存在很長時間了這個庫是用C+編寫的,只提供C+接口OpenGUI基于一個用匯編語言實現(xiàn)的x86圖形內(nèi)核,提供了一個高層的C/C+圖形接口OpenGUI提供了二維繪圖函數(shù)原型、消息驅(qū)動的API及BMP文件格式支持OpenGUI功能強大,使用方便,支持鼠標和鍵盤事件,在Linux上基于FrameBuffer實現(xiàn)繪圖由于OpenGUI基于匯編實現(xiàn)內(nèi)核并利用MMX指令進行了優(yōu)化,因此運行速度非??欤强梢浦残允艿搅擞绊懙谝还?jié) 嵌入式GUI簡介,二、嵌入式GUI的種類,一、Qt與Qt/Embedded簡介,二、Qt的特點,三、Qt的執(zhí)行過程,四、Qt的插槽機制,五、一個完整的Qt程序,六、QtDesigner介紹,第二節(jié) 嵌入式GUI Qt,Qt是Trolltech公司的標志性產(chǎn)品,是一個跨平臺的C+圖形用戶界面(GUI)工具包Qt的最大特點就是支持多平臺處理,因為Qt對不同平臺的專門API進行了封裝。
Qt/Embedded是在嵌入式環(huán)境下所使用的Qt,具有Qt 在桌面系統(tǒng)的所有功能,是Trolltech公司為嵌入式設備上的圖形用戶界面和應用開發(fā)而定制的工具開發(fā)包,第二節(jié) 嵌入式GUI Qt,一、Qt與Qt/Embedded簡介,面向?qū)ο?:Qt使用模塊設計,并注重軟件構(gòu)件或元素的可重用性構(gòu)件支持,:Qt提供信號(signal)和插槽(slot)概念,這是一種類型安全的方法,它允許回調(diào),并支持對象之間在彼此不知道對方信息的情況下進行合作,這使得Qt適合于真正的構(gòu)件編程友好的聯(lián)機幫助,:Qt提供了大量的聯(lián)機參考文檔,有超文本HTML方式,也有Linix幫助手冊頁和補充說明對于初學者,其中的指南將一步步地介紹如何進行Qt編程便利性,:Qt是一種跨平臺的GUI工具包,它對編程者隱藏了在處理不同窗口系統(tǒng)時潛在的問題,Qt定義了一些類來隱藏在不同操作系統(tǒng)上不同處理方式下的細節(jié)問題第二節(jié) 嵌入式GUI Qt,二、Qt的特點,用戶自定義,:使用其他一些工具包時經(jīng)常會遇到這樣一種情況,沒有真正適合需求的組件,聲稱自定義的組件對用戶來說就像一個黑匣子而在Qt中生成用戶自定義的組件非常簡單,而且易于修改組件的行為。
國際化,:Qt為本地化應用提供了完全的支持,所有用戶界面文本都可以基于消息翻譯表被翻譯成各國語言,Qt還支持雙字節(jié)16位國際字符標準豐富的API函數(shù):Qt為專業(yè)應用提供了大量的函數(shù),在Qt的API中含有大約250個C+類,大多數(shù)類都是GUI專有的可用戶化外觀,:Qt支持主題,基于Qt的應用程序能夠在Windows外觀、Motif外觀,以及其他一些用戶化外觀主題之間切換完整的一套組件工具,:Qt編程的基本模塊稱之為組件,組件是用戶界面的組成部分,Qt含有用來創(chuàng)建專業(yè)外觀的用戶界面所需要的所有組件,第二節(jié) 嵌入式GUI Qt,二、Qt的特點,10,Qt的執(zhí)行過程如圖6-2所示Qt應用程序初始化之后,在Qt庫的支持下響應相應的處理事件并且返回第二節(jié) 嵌入式GUI Qt,三、Qt的執(zhí)行過程,11,該實現(xiàn)過程需要Qt最主要的三個基類:QObject類、QApplication類和QWidget類QObject,QObject類是所有能夠處理信號、插槽和事件的Qt對象的基類,能夠創(chuàng)建帶有父對象及其名字的對象,對象的父對象可以看作該對象的所有者QApplication,QApplication類負責GUI應用程序的控制流和主要設置。
它包括主事件循環(huán)體,負責處理和調(diào)度所有來自窗口系統(tǒng)和其他資源的事件,并且處理應用程序的開始、結(jié)束以及會話管理,還包括系統(tǒng)和應用程序方面的設置QWidget,QWidget類是所有用戶接口對象的基類,它繼承了QObject類的屬性組件是用戶界面的單元組成部分,它接收來自鼠標、鍵盤和其他窗口系統(tǒng)的事件,并且繪制到屏幕上QWidget類有很多成員函數(shù),但一般不直接使用,而是通過子類繼承來使用其函數(shù)功能例如,QPushButton、QlistBox等都是它的子類第二節(jié) 嵌入式GUI Qt,三、Qt的執(zhí)行過程,12,在Qt程序中,事件處理采用了信號(signal)和插槽(slot)機制信號和插槽機制的好處是不需要調(diào)用翻譯表,節(jié)省資源利用信號和插槽進行對象間的通信是Qt最主要的特征之一當對象狀態(tài)發(fā)生改變的時候,發(fā)出signal通知所有的slot接收signal,盡管它并不知道哪些函數(shù)定義了slot,而slot也不知道要接收怎樣的signalsignal和slot機制真正實現(xiàn)了封裝的概念,但它們之間并不是一一對應的第二節(jié) 嵌入式GUI Qt,四、Qt的插槽機制,13,顯然,由右圖可知,同一個信號可以連接到多個插槽,多個信號也可以連接到同一個插槽之中。
隨時可以建立一個連接,或者取消一個連接不過取消一個連接不是很常用,因為當一個對象被刪除后,它所包含的連接都會被自動取消本節(jié)給出一個例子,首先產(chǎn)生一個Qapplication類的實例,然后定義窗口實例并把它作為程序的主窗口,最后調(diào)用show()和exec()方法,使自動界面作為主界面,程序進入消息循環(huán)代碼如下:,#include,#include,int main(int argc,char*argv),QApplication app(argc,argv);,QLabel*hello=new QLabel(Hello Qt/Embedded!,0);,app.setMainWidget(hello);,hello-show();,return app.exec();,第二節(jié) 嵌入式GUI Qt,五、一個完整的Qt程序,14,Qt應用程序可以用Qt Desinger來編寫Qt Designer的功能十分強大,并且提供了大量可供編程使用的組件,從而省略了許多重復性的工作,可以減少程序的開發(fā)周期,Qt Designer可以新建工程,并且在工程文件中自動生成關于窗體文件的.cpp、.h文件和main.cpp文件。
其中,.cpp文件和.h文件也可以通過uic工具生成之后可以通過progen命令生成main.pro,通過tmake工具生成makefile文件,再make即可得到相應的Qt應用程序第二節(jié) 嵌入式GUI Qt,六、QtDesigner介紹,15,一、Qtopia簡介,二、Qtopia的功能,三、Qtopia編程,第三節(jié) 基于Qt技術的Qtopia,16,Qtopia是由Trolltech公司基于Qt/Embedded庫,專門針對采用嵌入式Linux系統(tǒng)的消費電子設備所開發(fā)的一套應用程序包和開發(fā)庫Qtopia平臺是用于創(chuàng)建基于Linux設備的應用程序框架,并且包含豐富的用戶應用程序Qtopia的設計利用了嵌入式Linux的高度優(yōu)化、高內(nèi)存效率的各種功能,為眾多的多應用程序設備提供主要的通用功能Qtopia軟件分為4個主要層次,第三節(jié) 基于Qt技術的Qtopia 一、Qtopia簡介,17,Qtopia主要有以下功能:,可定制的用戶界面,:Qtopia支持每像素24位,并且集成了可縮放矢量圖形(SVG)增強的輸入法,:多種鍵盤輸入法廣泛的國際化支持,:包括擴展的Unicodc支持,以及從右至左的文本模式。