新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Qt圖形編程基礎之:Qt/Embedded開發(fā)入門

        Qt圖形編程基礎之:Qt/Embedded開發(fā)入門

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257103.htm

        12.2開發(fā)入門

        12.2.1介紹

        1.架構

        以原始Qt為基礎,并做了許多出色的調整以適用于嵌入式環(huán)境。Qt/Embedded通過QtAPI與I/O設施直接交互,成為嵌入式端口。同Qt/X11相比,Qt/Embedded很省內存,因為它不需要一個X服務器或是Xlib庫,它在底層拋棄了Xlib,采用framebuffer(幀緩沖)作為底層圖形接口。同時,將外部輸入設備抽象為keyboard和mouse輸入事件。Qt/Embedde的應用程序可以直接寫內核緩沖幀,這避免開發(fā)者使用繁瑣的Xlib/Server系統(tǒng)。圖12.1所示比較了Qt/Embedded與Qt/X11的架構區(qū)別。

        使用單一的API進行跨平臺的編程可以有很多好處。提供嵌入式設備和桌面計算機環(huán)境下應用的公司可以培訓開發(fā)人員使用同一套工具開發(fā)包,這有利于開發(fā)人員之間共享開發(fā)經驗與知識,也使得管理人員在分配開發(fā)人員到項目中的時候增加靈活性。更進一步來說,針對某個平臺而開發(fā)的應用和組件也可以銷售到Qt支持的其他平臺上,從而以低廉的成本擴大產品的市場。

        (1)窗口系統(tǒng)。

        一個Qt/Embedded窗口系統(tǒng)包含了一個或多個進程,其中的一個進程可作為服務器。該服務進程會分配客戶顯示區(qū)域,以及產生鼠標和鍵盤事件。該服務進程還能夠提供輸入方法和一個用戶接口給運行起來的客戶應用程序。該服務進程其實就是一個有某些額外權限的客戶進程。任何程序都可以在命令行上加上“-qws”的選項來把它作為一個服務器運行。

        客戶與服務器之間的通信使用共享內存的方法實現,通信量應該保持最小,例如客戶進程直接訪問幀緩沖來完成全部的繪制操作,而不會通過服務器,客戶程序需要負責繪制它們自己的標題欄和其他式樣。這就是Qt/Embedded庫內部層次分明的處理過程??蛻艨梢允褂肣COP通道交換消息。服務進程簡單的廣播QCOP消息給所有監(jiān)聽指定通道的應用進程,接著應用進程可以把一個連接到一個負責接收的信號上,從而對消息做出響應。消息的傳遞通常伴隨著二進制數據的傳輸,這是通過一個QDataStream類的序列化過程來實現的,有關這個類的描述,請讀者參考相關資料。

        QProcess類提供了另外一種異步的進程間通信機制。它用于啟動一個外部的程序并且通過寫一個標準的輸入和讀取外部程序的標準輸出和錯誤碼來和它們通信。

        (2)字體

        Qt/Embedded支持4種不同的字體格式:TrueType字體(TTF),PostscriptType1字體,位圖發(fā)布字體(BDF)和Qt的預呈現(Pre-rendered)字體(QPF)。Qt還可以通過增加Qfont-
        Factory的子類來支持其他字體,也可以支持以插件方式出現的反別名字體。

        每個TTF或者TYPE1類型的字體首次在圖形或者文本方式的環(huán)境下被使用時,這些字體的字形都會以指定的大小被預先呈現出來,呈現的結果會被緩沖。根據給定的字體尺寸(例如10或12點陣)預先呈現TTF或者TYPE1類型的字體文件并把結果以QPF的格式保存起來,這樣可以節(jié)省內存和CPU的處理時間。QPF文件包含了一些必要的字體,這些字體可以通過makeqpf工具取得,或者通過運行程序時加上“-savefonts”選項獲取。如果應用程序中使用到的字體都是QPF格式,那么Qt/Embedded將被重新配置,并排除對TTF和TYPE1類型的字體的編譯,這樣就可以減少Qt/Embedded的庫的大小和存儲字體的空間。例如一個10點陣大小的包含所有ASCII字符的QPF字體文件的大小為1300字節(jié),這個文件可以直接從物理存儲格式映射成為內存存儲格式。

        Qt/Embedded的字體通常包括Unicode字體的一部分子集,ASCII和Latin-1。一個完整的16點陣的Unicode字體的存儲空間通常超過1MB,我們應盡可能存儲一個字體的子集,而不是存儲所有的字,例如在一個應用中,僅僅需要以Cappuccino字體、粗體的方式顯示產品的名稱,但是卻有一個包含了全部字形的字體文件。

        (3)輸入設備及輸入法。

        Qt/Embedded3.0支持幾種鼠標協(xié)議:BusMouse、IntelliMouse,Microsoft和MouseMan.Qt/
        Embedded還支持NECVr41XX和iPAQ的觸摸屏。通過從QWSMouseHandler或者Qcalibra-
        tedMouseHandler派生子類,開發(fā)人員可以讓Qt/Embedded支持更多的客戶指示設備。

        Qt/Embedded支持標準的101鍵盤和Vr41XX按鍵,通過子類化QWSKeyboardHandler可以讓Qt/Embedded支持更多的客戶鍵盤和其他的非指示設備。

        對于非拉丁語系字符(例如阿拉伯、中文、希伯來和日語)的輸入法,需要把它寫成過濾器的方式,并改變鍵盤的輸入。輸入法的作者應該對全部的QtAPI的使用有完整的認識。在一個無鍵盤的設備上,輸入法成了惟一的輸入字符的手段。Qtopia提供了4種輸入方法:筆跡識別器、圖形化的標準鍵盤、Unicode鍵盤和基于字典方式提取的鍵盤。

        (4)屏幕加速

        通過子類化QScreen和QgfxRaster可以實現硬件加速,從而為屏幕操作帶來好處。Troll-
        tech提供了Mach64和Voodoo3視頻卡的硬件加速的驅動例子,同時可以按照協(xié)議編寫其他的驅動程序。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 3 4 5 6 7 8 9 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 仪陇县| 孟州市| 湘乡市| 兴海县| 玉屏| 揭阳市| 米泉市| 定陶县| 布拖县| 饶河县| 同德县| 肃北| 阿合奇县| 灵石县| 安平县| 股票| 陇南市| 扶风县| 新邵县| 颍上县| 普兰店市| 林州市| 南汇区| 临洮县| 孝感市| 嫩江县| 新源县| 遂平县| 新沂市| 凤庆县| 镇赉县| 吴旗县| 香河县| 荃湾区| 奉贤区| 上林县| 兴业县| 寿阳县| 休宁县| 永安市| 南通市|