基于QtE的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_說明_第1頁
基于QtE的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_說明_第2頁
基于QtE的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_說明_第3頁
基于QtE的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_說明_第4頁
基于QtE的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)_說明_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、. . . . I / 29畢業(yè)設(shè)計(jì)論文畢業(yè)設(shè)計(jì)論文基于基于 Qt/EQt/E 的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)的嵌入式中文輸入法的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說明畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明原創(chuàng)性聲明本人重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文) ,是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作與取得的成果。盡我所知,除文中特別加以標(biāo)注和致的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得與其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對(duì)本研究提供過幫助和做出過貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說明并表示了意。作 者 簽 名:日 期:指導(dǎo)教師簽名:

2、日期:使用授權(quán)說明使用授權(quán)說明本人完全了解大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利. . . . II / 29為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉咳?。作者簽名: 日 期:摘 要隨著嵌入式系統(tǒng)的迅猛發(fā)展,嵌入式系統(tǒng)廣泛地運(yùn)用于各個(gè)領(lǐng)域中,如:智能家居、手持設(shè)備,工業(yè)系統(tǒng)等諸多領(lǐng)域。嵌入式系統(tǒng)的資源有限,對(duì)資源十分敏感,因此要求嵌入式 GUI 必須占用十分少的系統(tǒng)資源,而目前應(yīng)用于嵌入式系統(tǒng)中

3、的中文輸入法都占用很多的資源,導(dǎo)致系統(tǒng)運(yùn)行緩慢,很是影響用戶的體驗(yàn)。因此,目前國(guó)外的用戶都殷切盼望出現(xiàn)一種系統(tǒng)級(jí)的、占用系統(tǒng)資源少的、輕量級(jí)的嵌入式中文輸入法。諾基亞公司開發(fā)了一款面向嵌入式系統(tǒng)的 Qt 版本:Qt/E,是當(dāng)前嵌入式 GUI 開發(fā)者比較青睞的開發(fā)工具,廣泛運(yùn)用于手持電子設(shè)備的開發(fā)中。然而,目前國(guó)外在 Qt/E平臺(tái)下開發(fā)的嵌入式中文輸入法,是基于 X lib 庫的,占用很多的系統(tǒng)資源,不是非常人性化?;谏鲜霰尘?,本文開發(fā)了一種輕量級(jí)的中文輸入法,該中文輸入法是基于 Qt/E平臺(tái)的。該輸入法具有良好的移植性和超強(qiáng)的擴(kuò)展性的,然而它沒有增加系統(tǒng)的開銷,使用戶可以方便,快捷地輸入中文

4、漢字、英文字母和各種標(biāo)點(diǎn)符號(hào)。本文首先闡述了開發(fā)嵌入式中文輸入法的意義以與研究現(xiàn)狀,接著介紹了需要用到的幾個(gè)相關(guān)的技術(shù),最后介紹了軟件的設(shè)計(jì)和實(shí)現(xiàn)的各個(gè)階段的主要工作和相關(guān)文檔。關(guān)鍵詞:嵌入式;Qt/E;中文輸入法. . . . III / 29AbstractAbstractWith the rapid development of embedded system, the embedded system is widely used in many fields, such as, intelligent household, handheld devices, industrial sy

5、stem, etc. Embedded system limited resources, is very sensitive to resources, therefore, ask embedded GUI must occupy little system resources, and currently applied to the Chinese input method embedded system is take a lot of resources, cause the system running slowly, very user experience is influe

6、nce. Therefore, the users at home and abroad are anxious appear a system level, occupies system resources less, lightweight embedded Chinese input method. Nokia has developed a paragraph of embedded system oriented version: Qt/E series, is the current embedded GUI developers prefer development tools

7、, widely used in the development of portable electronics. However, both at home and abroad in Qt/E the workbench development embedded Chinese input method, is based on the X the lib library, take a lot of system resources, not very humane. Based on the background, this paper developed a lightweight

8、Chinese input method, this Chinese input method is based on the Qt/E platform. The input method has good portability and strong expansibility, but it has not increased system overhead, the user can convenient, quick to enter Chinese characters, English letters and various punctuation. This article e

9、laborates the significance of developing embedded Chinese input method and the research status, then introduces the need to use the technology of several related, and finally introduces software design and implementation of the main stages working and related documents.KeyKey wordswords : : embedded

10、;qt/e;chinese input metho. . . . I / 29目 錄1 緒論 11.1 課題研究的意義 11.2 嵌入式中文輸入法的研究現(xiàn)狀 11.3 課題研究容與目標(biāo) 21.3.1 課題研究的容 21.3.2 課題研究的目標(biāo) 21.3.3 開發(fā)平臺(tái)的選擇 22 相關(guān)技術(shù)概述 32.1 交叉編譯簡(jiǎn)介 32.2 QT簡(jiǎn)介 32.3 QT/E 簡(jiǎn)介 32.4 VIM簡(jiǎn)介 43 系統(tǒng)需求分析 63.1 需求分析的目的 63.2 需求分析的地位與作用 63.3 系統(tǒng)應(yīng)該滿足的功能 64 系統(tǒng)設(shè)計(jì) 84.1 搭建 QT/E 開發(fā)環(huán)境 84.2 交叉編譯環(huán)境的搭建 114.3 輸入法設(shè)計(jì)

11、114.3.1 輸入法的原理 124.3.2 輸入法流程圖 124.3.3 關(guān)鍵模塊介紹 135 系統(tǒng)安裝與演示 205.1 系統(tǒng)安裝 205.2 系統(tǒng)運(yùn)行截圖 215.2.1 輸入法懸浮窗截圖 215.2.2 中文輸入截圖 225.2.3 小寫英文輸入截圖 235.2.4 大寫英文輸入截圖 246 結(jié)論 26參考文獻(xiàn) 27致 28. . . . 1 / 291 緒論1.1 課題研究的意義(1)嵌入式產(chǎn)業(yè)快速的發(fā)展當(dāng)今社會(huì),嵌入式產(chǎn)業(yè)的高速發(fā)展,使嵌入式產(chǎn)品廣泛運(yùn)用于各個(gè)領(lǐng)域中,如:智能家電,車載 GPS,手持設(shè)備,等等領(lǐng)域,嵌入式產(chǎn)品已經(jīng)成為人們生活中離不開的一部分嵌入式系統(tǒng)沒有一個(gè)明確的定

12、義,目前業(yè)專家學(xué)者一致比較認(rèn)可的定義是:嵌入式系統(tǒng)是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能可靠性成本體積功耗等有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)從定義可知,嵌入式系統(tǒng)也是一種計(jì)算機(jī)系統(tǒng),是針對(duì)某一應(yīng)用的專用計(jì)算機(jī)系統(tǒng),嵌入式系統(tǒng)可以定制,因此,嵌入式系統(tǒng)的發(fā)展很快。(2)輸入法在人機(jī)交互中必不可少GUI 是人機(jī)交互不可缺少的部分,一個(gè)產(chǎn)品 GUI 的好壞往往決定了這個(gè)產(chǎn)品的優(yōu)劣,而嵌入式 GUI 具有下面幾個(gè)方面的基本要求:輕型占用資源少高性能高可靠性便于移植可配置等特點(diǎn)一個(gè)良好的 GUI 肯定要有一款人性化的輸入法嵌入式設(shè)備的發(fā)展趨勢(shì)中,重要的一點(diǎn)是要低功耗,盡可能的

13、減少系統(tǒng)的開銷,因此嵌入式設(shè)備的輸入法也需要在保持功能的前提下,將系統(tǒng)開銷降低最低。Qt 的跨平臺(tái)性非常良好,目前,大部分嵌入式 GUI 用 Qt 開發(fā)的。1.2 嵌入式中文輸入法的研究現(xiàn)狀嵌入式的迅猛發(fā)展,目前,在手持設(shè)備的移動(dòng)終端中,廣泛采用以液晶觸摸顯示屏實(shí)現(xiàn)的人性化的人機(jī)交互式 GUI。人機(jī)交互 GUI,在不同應(yīng)用領(lǐng)域的場(chǎng)合,對(duì)人機(jī)GUI 的要求也不盡一樣,一些情況下,只要求顯示和選擇一些簡(jiǎn)單的結(jié)果和參數(shù),而在大部分移動(dòng)信息終端中,要求字符的輸入,有些智能終端中不僅要求有英文,數(shù)字的輸入,更需要中文漢字的輸入。目前國(guó)外的嵌入式中文輸入法,都是在 Qt/E 平臺(tái)下應(yīng)用和開發(fā)的,在這平臺(tái)下

14、應(yīng)用的,主要有兩種嵌入式中文輸入法:(1)其中一種輸入法是移植一般 PC 機(jī) Windows 系統(tǒng)下,現(xiàn)有的中文輸入法,該輸入法是基于 Qt-X11 的,移植了該中文輸入法到嵌入式設(shè)備,但該輸入法需要Windows 系統(tǒng)下的 Xlib 庫的支持,這會(huì)導(dǎo)致系統(tǒng)需要很大的系統(tǒng)資源,很是影響系統(tǒng)的運(yùn)行效率。(2)另外一種輸入法是使用了 Qt/E 平臺(tái)自帶插件的方法,但該輸入法需要一個(gè)桌. . . . 2 / 29面系統(tǒng)來管理該輸入法,為了管理該輸入法,往往移植了 Qtopia 這個(gè) Qt/E 下的桌面系統(tǒng)來管理該嵌入式中文輸入法,但是,一般的手持設(shè)備是不需要桌面管理系統(tǒng)的,該嵌入式中文輸入法給這類設(shè)

15、備帶來了不必要的額外的開銷,造成了系統(tǒng)資源的嚴(yán)重浪費(fèi)。1.3 課題研究容與目標(biāo)1.3.1 課題研究的容本課題主要討論了一種基于 Qt/E 的嵌入式中文拼音輸入法的研究與實(shí)現(xiàn)的方法。課題的主要研究的容是:Qt/E 開發(fā)環(huán)境的搭建,嵌入式現(xiàn)狀的分析,交叉編譯環(huán)境的搭建,Qt/E 體系結(jié)構(gòu)的研究,中文輸入法的實(shí)現(xiàn),輸入法安裝到目標(biāo)板的實(shí)現(xiàn)。1.3.2 課題研究的目標(biāo)針對(duì)以上情況,決定組建一個(gè)界面友好,功能完善的基于 Qt/E 嵌入式中文拼音輸入法,該輸入法可以實(shí)現(xiàn)中英輸入的切換,實(shí)現(xiàn)中文,英文,數(shù)字與常用標(biāo)點(diǎn)符號(hào)的輸入,輸入法最大限度地實(shí)現(xiàn)了易移植性和易操作性。輸入法運(yùn)行穩(wěn)定、安全可靠。1.3.3

16、開發(fā)平臺(tái)的選擇本系統(tǒng)將在 Linux 系統(tǒng)里,用 QtDesigner4 作為界面設(shè)計(jì)工具,Vim 作為開發(fā)環(huán)境,arm-linux-gcc-4.4.3 作為交叉編譯器,Qt 為開發(fā)語言,運(yùn)行環(huán)境為 Qt/E。具體技術(shù)將在下一章中介紹。2 相關(guān)技術(shù)概述2.1 交叉編譯簡(jiǎn)介交叉編譯,通俗的講就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行的代碼。所謂的平臺(tái),實(shí)際上包含兩個(gè)概念:體系結(jié)構(gòu)、操作系統(tǒng)。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng);同樣,同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。舉例來說,常說的 x86 Windows 平臺(tái)實(shí)際上是 Intel x86 體系結(jié)構(gòu)和 Windows for x86 操

17、作系統(tǒng)的統(tǒng)稱;而 x86 Linux 平臺(tái)實(shí)際上是 Intel x86 體系結(jié)構(gòu)和 Linux for x86 操作系統(tǒng)的簡(jiǎn)稱。嵌入式設(shè)備一般對(duì)系統(tǒng)資源比較敏感,不能運(yùn)行軟件的開發(fā)環(huán)境,只執(zhí)行程序,嵌入式設(shè)備叫做目標(biāo)機(jī);一般的 pc 機(jī)上運(yùn)行開發(fā)環(huán)境和編譯器,pc 機(jī)叫做宿主機(jī)。在宿主機(jī)平臺(tái)上開發(fā)程序,并在這個(gè)平臺(tái)上運(yùn)行交叉編譯器,編譯的程序;而由交叉編譯器生成的程序?qū)⒃谀繕?biāo)平臺(tái)上運(yùn)行。. . . . 3 / 29伴隨著以計(jì)算機(jī)技術(shù)、通訊技術(shù)為主的信息技術(shù)的飛速發(fā)展和互聯(lián)網(wǎng)的廣泛應(yīng)用,計(jì)算機(jī),通訊,消費(fèi)電子,三者合一將成為必然趨勢(shì)。信息家電,手持設(shè)備,移動(dòng)設(shè)備等嵌入式產(chǎn)品的迅速發(fā)展,使得嵌入式

18、軟件開發(fā)再度成為一個(gè)研究熱點(diǎn)。 由于嵌入式設(shè)備的性能局限,往往不能通過本機(jī)編譯得到所需軟件的可執(zhí)行程序。因此,以Linux 為主機(jī)操作系統(tǒng),搭配一個(gè)交叉編譯系統(tǒng),為嵌入式設(shè)備生成可執(zhí)行程序已成為現(xiàn)在日益流行的編譯嵌入式軟件的解決方案。而開放源碼的編譯器 GCC,經(jīng)過多年的發(fā)展,已能支持幾乎所有知名廠商的處理器,是嵌入式軟件開發(fā)中理想的交叉編譯器。2.2Qt 簡(jiǎn)介Qt 是諾基亞公司開發(fā)的一個(gè)跨平臺(tái)的 C+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。Qt 是完全面向?qū)ο蟮?,最有很?qiáng)的擴(kuò)展性,并且允許真正的組件編程。從 1996 年,Qt 進(jìn)入商業(yè)領(lǐng)域,它

19、已經(jīng)成為全世界圍數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。Qt 也是流行的 Linux 桌面環(huán)境 KDE 的基礎(chǔ)。 Qt 具有下列優(yōu)點(diǎn): 優(yōu)良的跨平臺(tái)特性,面向?qū)ο螅?豐富的 API,支持 2D/3D 圖形渲染,支持 OpenGL ,大量的開發(fā)文檔 ,XML 支持 ,Webkit 引擎的集成,可以實(shí)現(xiàn)本地界面與 Web 容的無縫集成 。2.3Qt/E 簡(jiǎn)介Qt/E,全稱為 Qt for Embedded,是 Qt 面向嵌入式開發(fā)的一個(gè)版本,通常所說的 Qt 是 Qt for x11 Linux ,是 Qt 面向 pc 機(jī)的一個(gè)版本,Qt for x11 Linux 和 Qt for Embedded Lin

20、ux 最大的差別,在于二者要顯示界面的容,所依賴的顯示基礎(chǔ)不同,這導(dǎo)致了兩者在體系結(jié)構(gòu)上的根本差異。Qt for x11 Linux:底層的顯示技術(shù)構(gòu)建在 Window 系統(tǒng)之上,完全依賴于Windows 系統(tǒng),在下層調(diào)用了 X Lib 的系統(tǒng)方法來顯示界面上的圖像。Qt for embedd linux:沒有構(gòu)建在 Window 系統(tǒng)之上,而是構(gòu)建在了 Linux 系統(tǒng)下的 framebuffer 之上,把在人機(jī) GUI 上需要展示的元素寫入 framebuffer。因?yàn)樵谇度胧皆O(shè)備上省略了 X 系統(tǒng),大大節(jié)省了許多的不必要的系統(tǒng)開銷,需要在 GUI 展示的圖像,直接寫入了 framebuf

21、fer,節(jié)省了系統(tǒng)資源,大大加快了顯示速度。這是Qt/E 的最大優(yōu)勢(shì)。兩者的體系結(jié)構(gòu)差別,如圖 2-1 所示:. . . . 4 / 29圖 2-1 Qt/E 和 Qt/X11 體系架構(gòu)對(duì)比因此,Qt/E 具有服務(wù)端層,這一層主要負(fù)責(zé)監(jiān)聽系統(tǒng)的事件,如:主要是keyboard 和 mouse 事件,移動(dòng)終端輸出事件,管理域,管理 top 窗口,管理光標(biāo)和管理屏幕保護(hù)程序等等諸多功能。系統(tǒng)被觸發(fā)產(chǎn)生的 keyboard 和 mouse 事件,首先就傳給服務(wù)端層,然后服務(wù)端再根據(jù)具體的實(shí)際情況把以上事件分派給,相對(duì)應(yīng)的應(yīng)用程序和軟件。2.4Vim 簡(jiǎn)介Vim 是 Linux 系統(tǒng)下最常用的文本編輯

22、器,Vim 是一個(gè)類似于 Vi 的文本編輯器,Vim 是 Vi 的升級(jí)版,Vim 在 Vi 的基礎(chǔ)上增加了很多新的特性,Vim 普遍被推崇為類Vi 編輯器中最好的一個(gè)。80 年代末,出現(xiàn)了 Vim 的 1.0 版本。最初的目標(biāo)只是完全復(fù)制 vi 的功能,那個(gè)時(shí)候的 Vim 是 Vi IMitation(模擬)的簡(jiǎn)稱。1991 年 Vim 1.14 版被 Fred Fish Disk #591 這個(gè) Amiga 用的免費(fèi)軟體集所收錄。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS 上。從此,Vim 的全名就正式變成 Vi Improved。 Vim 的發(fā)展很迅速,

23、在這之后,Vim 加入了不計(jì)其數(shù)的新功能。作為第一個(gè)里程碑的是 1994 年的 3.0 版本加入了多視窗編輯模式(分割視窗) 。從那之后,同一屏幕可以顯示的 Vim 編輯文件數(shù)可以不止一個(gè)了。1996 年發(fā)布的 Vim 4.0 是第一個(gè)利用圖型接口(GUI)的版本。1998 年 5.0 版本的 Vim 加入了 highlight(語法高亮)功能。2001 年的 Vim 6.0 版本加入了代碼折疊、插件、多國(guó)語言支持、垂直分割視窗等功能。2006 年 5 月發(fā)布的 Vim 7.0 版更加入了拼字檢查、上下文相關(guān)補(bǔ)完,標(biāo)簽頁編輯等新功能?,F(xiàn)在最新的版本是 2008 年 8 月發(fā)布的 Vim 7.2

24、,該版本合并了 Vim 7.1 以來的所有修正補(bǔ)丁,并且加入了腳本的浮點(diǎn)數(shù)支持。. . . . 5 / 293 系統(tǒng)需求分析3.1 需求分析的目的需求分析就是要明確需求方和開發(fā)放需要開發(fā)一個(gè)什么樣的產(chǎn)品才能滿足客戶的需求,即明確“需要干什么” ,不需要知道“怎么干” 。本系統(tǒng)要實(shí)現(xiàn)的是一個(gè)用于嵌入式 GUI 的中文拼音輸入法,因?yàn)橐m用于嵌入式平臺(tái)下,因此該輸入法應(yīng)占用較少的系統(tǒng)資源,輸入法界面要美觀,輸入要方便,中英輸入法切換要方便。3.2 需求分析的地位與作用需求分析是開發(fā)軟件是否成功的決定因素。軟件項(xiàng)目多數(shù)的問題都是因?yàn)樾枨蠓治霾划?dāng)或者是需求分析考慮不周全而導(dǎo)致的。在軟件需求分析的過程中

25、,導(dǎo)致問題的出現(xiàn)主要包括以下方面,包括用戶的需求不明確,需要實(shí)現(xiàn)的功能不明確, 、需求的文檔不是很完善等,都可能造成產(chǎn)品開發(fā)的過程中的出現(xiàn)很多困難。軟件需求分析,雖然是軟件開發(fā)整個(gè)周期的開始階段,但也是軟件開發(fā)整個(gè)周期中最為關(guān)鍵的一個(gè)階段,關(guān)系到項(xiàng)目開發(fā)成敗的一個(gè)關(guān)鍵步驟。3.3 系統(tǒng)應(yīng)該滿足的功能通過調(diào)查研究顯示,一個(gè)良好的輸入法不僅僅要使用戶輸入起來方便,更需要安全、可靠、高效的系統(tǒng)支持。本輸入法的要:(1)要求具有良好的界面。(2)占用系統(tǒng)資源少。(3)輸入方便。 本系統(tǒng)需要實(shí)現(xiàn)的功能是:中文,大小寫英文,常用標(biāo)點(diǎn)符號(hào)的輸入,具有軟鍵盤,并支持觸摸屏,具體功能模塊如圖 3-1 所示:.

26、. . . 6 / 29圖 3-1 系統(tǒng)功能模塊圖4 系統(tǒng)設(shè)計(jì)4.1 搭建 Qt/E 開發(fā)環(huán)境在進(jìn)行開發(fā)之前,首先決定的第一個(gè)問題就是,該使用什么開發(fā)環(huán)境來編寫該系統(tǒng)? 目前常見的嵌入式 GUI,主要有 Qt,GTK+幾種工具,Qt 的移植性更強(qiáng),基于此,本系統(tǒng)采用 Qt 來開發(fā)。Qt 是諾基亞開發(fā)的一個(gè)跨平臺(tái)性很強(qiáng)的基于 C+圖形用戶 GUI 開發(fā)庫。開發(fā)語言為 C+。有很多的有優(yōu)點(diǎn),如:具有優(yōu)良的跨平臺(tái)特性、面向?qū)ο?、豐富的 API、大量的開發(fā)文檔。移植步驟:(1)準(zhǔn)備好如下源碼包:Qt/E 源碼包:qt-embedded-linux-opensource-src-4.5.0.tar.b

27、z2Qt-x11 源碼包:qt-x11-opensource-src-4.5.0.tar.bz2觸摸屏源碼包:tslib-11.4.tar.gz. . . . 7 / 29(2)編譯安裝 tslib-1.4編譯 tslib-1.4 應(yīng)設(shè)置好參數(shù),具體參數(shù)如圖 4-1 所示:圖 4-1 編譯 tslib 參數(shù)(3)編譯安裝 Qt-x11-4.5.0安裝 Qt-x11-4.5.0 時(shí),最關(guān)鍵的步驟是設(shè)置 Qt-x11-4.5.0 的環(huán)境變量環(huán)境變量具體如圖 4-2 所示:圖 4-2 Qt-x11-4.5.0 環(huán)境變量(4)編譯安裝 Qt/E4.5.0編譯安裝 Qt/E4.5.0 時(shí),需設(shè)置好編譯參

28、數(shù),具體參數(shù)如圖 4-3 所示:圖 4-3 編譯 Qt/E4.5.0 參數(shù) “-I/home/mytslib/include -L/home/ mytslib/lib ”指明剛才編譯出來觸摸屏的庫文件與頭文件存放路徑。 “-qt-mouse-tslib”表示將使用觸摸屏。編譯完成后,安裝時(shí),最關(guān)鍵的步驟還是設(shè)置環(huán)境變量具體的環(huán)境變量如圖 4-4 所示:. . . . 8 / 29圖 4-4Qt/E4.5.0 環(huán)境變量(5)移植相關(guān)庫文件至開發(fā)板首先準(zhǔn)備一個(gè)文件系統(tǒng),根據(jù)友善提供的文檔制作了一個(gè)文件系統(tǒng),路徑為/opt/rootfs, 其中 rootfs 就是根文件系統(tǒng)。把編譯生成的庫文件與配置

29、文件復(fù)制至開發(fā)板上,用 NFS 方式掛載文件系統(tǒng),把目標(biāo)庫文件等下載到開發(fā)板。需移植到開發(fā)板的文件如圖 4-5 所示:圖 4-5 需移植到開發(fā)板的文件移植如上文件到開發(fā)板后,編輯開發(fā)板/etc/profile,用來在開發(fā)板上設(shè)置環(huán)境變量,具體的環(huán)境變量如圖 4-6 所示:. . . . 9 / 29圖 4-6 移植 Qt/E 應(yīng)設(shè)置的環(huán)境變量設(shè)置觸摸屏的配置文件 ts.conf把# module_raw collie 前面的“”號(hào)去掉,然后把該行移至行首,最后配置文件如圖 4-7 所示:圖 4-7 觸摸屏配置文件(6)驗(yàn)證 tslib 是否移植成功.在開發(fā)板終端下執(zhí)行觸摸較正程序:在終端執(zhí)行

30、./ts_calibrate運(yùn)行該程序主要是校正觸摸屏,運(yùn)行 ts_calibrate 后,屏幕將出現(xiàn)五點(diǎn)校正畫面,依次點(diǎn)擊五點(diǎn)后,將生成觸摸屏校正數(shù)據(jù)文件/etc/pointercal.在開發(fā)板終端下執(zhí)行觸摸屏拖曳測(cè)試程序:在終端執(zhí)行./ts_test 運(yùn)行后屏幕出現(xiàn) drag,draw 依次選擇后進(jìn)行測(cè)試,同時(shí)終端下出現(xiàn)拖曳后的取點(diǎn)數(shù)據(jù)(7)驗(yàn)證 QT4.5.0 是否移植成功在宿主機(jī)上編譯好 Qt 的例子程序,下載到開發(fā)板下并執(zhí)行:#./application qwsfontunifont如能正常顯示,QT4.5.0 移植成功。. . . . 10 / 294.2 交叉編譯環(huán)境的搭建(1)

31、配置 minicom在宿主機(jī) Redhat Linux 5.0 下新建終端,在終端命令提示符后輸入 minicom-s,回車,然后按照提示設(shè)置波特率 115200,8 位數(shù)據(jù),1 位停止位,無控制流,保存退出。(2)TFTP 服務(wù)的配置在終端中運(yùn)行 setup-system service-tftp 增加 TFTP 服務(wù),并去掉 ipchains和 iptables 兩項(xiàng),然后在 Firewall configuration,選中 no firewall,保存退出,執(zhí)行 service xinetd restart 啟動(dòng) TFTP 服務(wù)。(3)NFS 服務(wù)器的配置在終端中運(yùn)行 setup-sy

32、stem service-NFS,增加 NFS 服務(wù),然后編輯文件exports,添加與目標(biāo)機(jī)共享的目錄,并設(shè)置目標(biāo)機(jī)對(duì)目錄的訪問權(quán)限,重新啟動(dòng)NFS 服務(wù)。(4)Linux 核移植通過并口,宿主機(jī)向目標(biāo)開發(fā)板的 Flash 燒寫引導(dǎo)程序 vivi,燒寫完畢后通過TFTP 服務(wù)把經(jīng)過裁剪的 Linux 核鏡像文件以與根文件系統(tǒng)下載到目標(biāo)板的 RAM 中,然后由 dnw 完成核與根文件系統(tǒng)從存到 Flash 的燒寫。最后需要在宿主機(jī)安裝主編譯器 Arm-linux-gcc,用來交叉編譯應(yīng)用程序。4.3 輸入法設(shè)計(jì)4.3.1 輸入法的原理Qt/E 是 C/S 結(jié)構(gòu),在服務(wù)端負(fù)責(zé)監(jiān)聽系統(tǒng)消息,比如:

33、keyboard 和 mouse 消息,而中文輸入法是一個(gè)全局性的模塊,所以在 Qt/E 中,把中文輸入法的設(shè)計(jì)放在了服務(wù)層。輸入法是屬于服務(wù)層的一部分。QWSInputMethod 是 Qt/E 的一個(gè)類,其是中文輸入法的基類,在 QWSInputMethod這個(gè)基類中定義了一些函數(shù)用以支持輸入法的程序的設(shè)計(jì),本文從此基類中繼承出了一個(gè)中文輸入法的類,在該類中處理 keyboard 和 mouse 事件,把接收到的 keyboard事件按照用戶所需要輸入的漢字的拼音,從字庫中查找出之對(duì)應(yīng)的漢字,詞組,或者是一個(gè)漢語短語,發(fā)送給當(dāng)前的顯示窗口,或者把用戶最后選擇的漢字、短語或詞組發(fā)送到當(dāng)前的顯

34、示窗口。需定義一個(gè)輸入法窗口來顯示用戶當(dāng)前的輸入。字符,漢字,英文的輸入一般分為三大步驟:(1)開始準(zhǔn)備輸入當(dāng)用戶在軟鍵盤上按下第一個(gè) keyboard 按鍵時(shí),輸入法會(huì)自動(dòng)創(chuàng)建出輸入法的. . . . 11 / 29上下文,輸入法上下文包含 keyboard 輸入字符。(2)選擇編輯當(dāng)有任何一個(gè)新的 keyboard 按鍵被按下的時(shí)候,輸入法就會(huì)主動(dòng)嘗試著去創(chuàng)建與 keyboard 輸入相對(duì)應(yīng)的中文字符,英文字符和數(shù)字等等,此時(shí),激活了中文輸入法的上下文,用戶可以自由的在中文輸入法的上下文中前后移動(dòng)光標(biāo)。(3)輸入完成當(dāng)用戶認(rèn)為輸入已經(jīng)完成的時(shí),用戶會(huì)選擇以某種方式來選擇最終的字符串,通常是

35、使用 keyboard 按鍵,或者 mouse 點(diǎn)擊,用戶最終所選擇的字符串會(huì)被發(fā)送到當(dāng)前的編輯窗口。4.3.2 輸入法流程圖本輸入法的流程是:用戶輸入,軟鍵盤得到響應(yīng),系統(tǒng)判斷是否處于中文輸入狀態(tài),是:進(jìn)入中文輸入流程,否:進(jìn)入英文輸入流程,具體流程圖如圖 4-8 所示:圖 4-8 輸入法流程圖4.3.3 關(guān)鍵模塊介紹(1)中文輸入模塊. . . . 12 / 29中文輸入模塊實(shí)現(xiàn)了中文輸入功能,用戶選擇了中文輸入狀態(tài),點(diǎn)擊軟鍵盤,輸入拼音,通過相應(yīng)的編碼,查找到字庫中與之對(duì)應(yīng)的漢字,顯示在編輯框中,用戶選擇所需輸入的漢字,中文輸入完成。系統(tǒng)中實(shí)現(xiàn)中文輸入的接口為:bool GetKey(i

36、nt,int);其中的關(guān)鍵代碼為:if(k = Qt:Key_Space) if(m_pinyin_frame-m_ime_info.candidates_on_page0) k=1; goto commit; else bKeyProcessed=false; else if(k = Qt:Key_Right|k = Qt:Key_Down) if(!m_pinyin_frame-next_page() bKeyProcessed=false; else if(k = Qt:Key_Left|k = Qt:Key_Up) if(!m_pinyin_frame-prev_page() bKey

37、Processed=false; else if( u = 8 & k = Qt:Key_Backspace) if(m_pinyin_frame-m_ime_info.pinyin.size()0) printf(Key_Backspace heren);String:iteratorpos=m_pinyin_frame-m_ime_info.pinyin.end()-1; m_pinyin_frame-m_ime_info.pinyin.erase(pos);. . . . 13 / 29 m_pinyin_frame-search(); bUpdate=true; (2)英文輸入

38、模塊英文輸入模塊實(shí)現(xiàn)了英文輸入功能,用戶選擇了英文輸入模式,點(diǎn)擊軟鍵盤,輸入字母,系統(tǒng)發(fā)送字符到輸入框,英文輸入完成。系統(tǒng)中實(shí)現(xiàn)英文輸入的接口為:bool SendKey(int u , int c);關(guān)鍵代碼為:QString result = QString(QChar(u); sendCommitString(result); if (m_pinyin_frame-isVisible() m_pinyin_frame-releaseKeyboard(); m_pinyin_frame-resetState(); m_pinyin_frame-m_engine.save_table();

39、(3)輸入窗口界面實(shí)現(xiàn)輸入窗口界面由軟鍵盤,中英文輸入法的切換按鍵,顯示拼音的輸入框,顯示漢語字符的顯示框組成。軟鍵盤要實(shí)現(xiàn),漢語拼音,大寫英文,小寫英文,常用標(biāo)點(diǎn)符號(hào)的輸入,因此,軟鍵盤的體積比較大,而一般手持設(shè)備的顯示屏都比較小,基于此,需要一鍵多用,來節(jié)省軟鍵盤的空間,把按鍵上需要顯示的文本寫在一個(gè) XML 文檔中,通過讀取該文檔來顯示按鍵上的文本:例如:,3 鍵對(duì)應(yīng)序號(hào)為 nr=”17”,初始化時(shí) PushButton 3 鍵 text 設(shè)置為“3” ,當(dāng)按下“shift”時(shí),text 設(shè)置為“#” 。軟鍵盤界面如圖 4-9 所示:. . . . 14 / 29圖 4-9 軟鍵盤界面因

40、為沒有桌面管理系統(tǒng),本輸入法設(shè)計(jì)了一個(gè)浮動(dòng)窗,用于打開軟鍵盤和中英文輸入切換,如圖 4-10 所示:圖 4-10 浮動(dòng)窗浮動(dòng)窗上顯示“中” ,表示輸入法,處于中文輸入模式,點(diǎn)擊“中” ,切換到英文輸入模式。點(diǎn)擊鍵盤,輸入法彈出軟鍵盤。關(guān)鍵代碼為:QPainter painter(this);QFontMetrics metric=painter.fontMetrics();QRect rect = metric.boundingRect(QChar(ZHONG);int width=170;printf(text metric is %d,%dn,rect.width(),rect.heigh

41、t();int x=PINYIN_X;int y=PINYIN_Y;painter.drawText(x,rect.height(),QChar(m_bEnglishMode?YING:ZHONG);QFrame:paintEvent(e);QPainter painter(this);painter.setClipRect (e-rect ();FIXME: how to get screen sizeunsigned int width = 160;the first row - pinyin inputed QFontMetrics metric=painter.fontMetrics(

42、);QRect rect = metric.boundingRect(QChar(ZHONG);int x=PINYIN_X;int y=PINYIN_Y;painter.drawText(x,rect.height(),QChar(m_bEnglishMode?YING:ZHONG);. . . . 15 / 29QPen penGray (QColor(128,128,128);QPen penWhite(QColor(255,255,255);QPen penText (QColor(0,0,0);QPen penPage (QColor(0,0,255);vertical line w

43、hich seperates chinese/english indicator with pinyin inputedpainter.setPen(penGray);painter.drawLine(x+rect.width()+2,y,x+rect.width()+2,y+rect.height();painter.setPen(penWhite);painter.drawLine(x+rect.width()+3,y,x+rect.width()+3,y+rect.height();int X=x+rect.width()+7;int Y=rect.height();if(m_bMaki

44、ngPhrase)QRect temp; QString s=QString:fromUtf8(MAKEPHRASE_OPEN);painter.setPen(penText);painter.drawText(X,Y,s);temp = metric.boundingRect(s);X+=temp.width();painter.setPen(penPage);painter.drawText(X,Y,m_ime_info.phrase);temp = metric.boundingRect(m_ime_info.phrase);X+=temp.width();s=QString:fromU

45、tf8(MAKEPHRASE_CLOSE);painter.setPen(penText);painter.drawText(X,Y,s);temp = metric.boundingRect(s);X+=temp.width()+2;(4)輸入法安裝卸載功能的實(shí)現(xiàn). . . . 16 / 29設(shè)計(jì)開發(fā)輸入法,最關(guān)鍵的就是能具有安裝功能,這樣系統(tǒng)中才會(huì)有輸入法模塊,輸入才能工作,實(shí)現(xiàn)該功能的接口為:Void XInputMethod:installInputMethod();此接口中,調(diào)用 setCurrentInputMethod 函數(shù)為當(dāng)前的設(shè)備安裝輸入法模塊,setCurrentInpu

46、tMethod 函數(shù)為 Qt/E 的 QWSServer 類的一個(gè)成員函數(shù),setCurrentInputMethod 函數(shù)的參數(shù)設(shè)置為 NULL,就是卸載輸入法模塊:關(guān)鍵代碼為:void XInputMethod:installInputMethod()XInputMethod* pim = instance(); if (pim) QWSServer:setCurrentInputMethod(pim); void XInputMethod:releaseInputMethod()if (XInputMethodPrivate:pInputMethod) QWSServer:setCurr

47、entInputMethod(NULL); delete XInputMethodPrivate:pInputMethod; XInputMethodPrivate:pInputMethod = NULL; XInputMethod* XInputMethod:instance()if (NULL = XInputMethodPrivate:pInputMethod) XInputMethodPrivate:pInputMethod = new XInputMethod(); . . . . 17 / 29 return XInputMethodPrivate:pInputMethod;(5)

48、輸入法鍵盤事件的過濾實(shí)現(xiàn)實(shí)現(xiàn)鍵盤事件過濾的接口為:virtual bool filter(int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );在此函數(shù)中處理鍵盤輸入,此函數(shù)的參數(shù)含義如下:unicode:Qt/E 統(tǒng)一使用的 keyboard 按鍵編碼,keycode: 鍵值,Qt/E 定義了一系列的鍵值與 keyboard 的鍵盤對(duì)應(yīng),modifiers: 此參數(shù)是表示有沒有其它的輔助的 keyboard 按鍵同時(shí)被 press,isPress: 此參數(shù)表示 keyboard 按鍵是被用戶按下,還是

49、被輸入法釋放,autoRepeat: 此參數(shù)表示這個(gè) keyboard 按鍵事件是不是自動(dòng)重復(fù)產(chǎn)生的事件函數(shù)的返回值為真,表示當(dāng)前的 keyboard 按鍵事件已經(jīng)被 Qt/E 處理了,不需要輸入法繼續(xù)分發(fā)該事件,返回值為假,表示該 keyboard 按鍵事件沒有被 Qt/E 處理,繼續(xù)分發(fā)該 keyboard 按鍵事件。關(guān)鍵代碼為:if (isWork & isPress) if(m_pinyin_frame-m_bEnglishMode) if(keycode = Qt:Key_Tab) m_pinyin_frame-m_bEnglishMode = false; m_pinyin

50、_frame-update(); return true; else if(unicode=65535 | unicode=8 | unicode=13 | unicode=27) if(initMod & unicode=13) initMod = false; SendKey(unicode,keycode);/. . . . 18 / 29 return true; goto end; else SendKey(unicode,keycode); if(initMod) initMod = false; return true; 5 系統(tǒng)安裝與演示5.1 系統(tǒng)安裝把輸入法編譯成

51、QT 庫文件,方便在項(xiàng)目中調(diào)用。在輸入法的主文件中,直接 make ,編譯生成四個(gè) lib 文件libMurphytalk.solibMurphytalk.so.1libMurphytalk.so.1.0libMurphytalk.so.1.0.0然后把以上庫文件下載至開發(fā)板的 Qt/E 的 lib 目錄下。將這四個(gè)文件,放到 QTE 的 lib 文件夾下,然后在 QTE 的 include 文件夾下,建立文件夾 EmbeddedType,并將相應(yīng)的頭文件依照下圖的形式,放入此文件夾中,如此在 QTE 庫中就有了 EmbeddedType 輸入法,如圖 5-1 所示:. . . . 19 /

52、29圖 5-1 輸入法頭文件截圖用戶開發(fā) GUI 時(shí),在項(xiàng)目的 main.cpp 函數(shù)中,必須調(diào)用if (QApplication:GuiServer = type) QPinyinImpl:installInputMethod();if (QApplication:GuiServer = type) QPinyinImpl:releaseInputMethod();來安裝和卸載輸入法,使用的時(shí)候,只要在主函數(shù)中,實(shí)現(xiàn)安裝和卸載輸入法的過程就可以調(diào)用輸入法。 在項(xiàng)目文件中加入 EmbeddedType 庫,在 MakeFile 中添加:LIBS+=-lMurphytalkqmake 與 mak

53、e 之后,需要將 EmbeddedType 文件夾中的字庫文件和配置文件下載到開發(fā)板.在開發(fā)板根目錄中的/etc 文件夾下,建立 EmbeddedType 文件夾。并將 EmbeddedType 文件夾中相應(yīng)的文件復(fù)制到這個(gè)文件夾下,如圖 5-2:圖 5-2 輸入法字庫和配置文件截圖輸入法安裝完成。5.2 系統(tǒng)運(yùn)行截圖. . . . 20 / 295.2.1 輸入法懸浮窗截圖因?yàn)闆]有桌面管理系統(tǒng)來管理中文輸入法,因此本輸入法開發(fā)了一個(gè)輸入法的置頂?shù)膽腋〈埃瑧腋〈吧巷@示“中”字,表示輸入法處在中文輸入模式,用戶可以方便,快捷的輸入中文短語,中文詞組,用戶如想要切換到英文輸入模式,只需點(diǎn)擊“中”

54、,“中”會(huì)變成“英” ,表示輸入法進(jìn)入了英文輸入模式,用戶可以方便的輸入英文字母。懸浮窗中部有一個(gè)小鍵盤的圖標(biāo),此圖標(biāo)是用于打開或關(guān)閉軟鍵盤的,單擊小鍵盤,輸入法彈出軟鍵盤,再點(diǎn)擊小鍵盤,輸入法關(guān)閉小鍵盤。輸入法懸浮窗,如圖5-3 所示。圖 5-3 輸入法懸浮窗5.2.2 中文輸入截圖 用戶選擇中文輸入模式,就可以方便地輸入中文。用戶點(diǎn)擊軟鍵盤上的按鍵,輸入需求的漢字對(duì)應(yīng)的拼音,輸入法根據(jù)拼音從字庫中查找出與之對(duì)應(yīng)的漢字發(fā)送到當(dāng)前的編輯窗口,用戶在選擇自己所要輸入的漢字。如圖 5-4 所示. . . . 21 / 29圖 5-4 中文輸入5.2.3 小寫英文輸入截圖 用戶選擇了小寫英文輸入模式

55、,用戶單擊按鍵,輸入英文字母,在輸入框中顯示出用戶輸入的字母,如圖 5-5 所示. . . . 22 / 29圖 5-5 小寫英文輸入5.2.4 大寫英文輸入截圖 用戶選擇了大寫英文輸入模式,用戶單擊按鍵,輸入英文字母,在輸入框中顯示出用戶輸入的字母,如圖 5-6 所示. . . . 23 / 29圖 5-6 大寫英文輸入6 結(jié)論通過這次畢業(yè)設(shè)計(jì),認(rèn)識(shí)的到了本人的實(shí)際水平。剛準(zhǔn)備做畢業(yè)設(shè)計(jì)時(shí),真的是無從下手,不知道做什么合適。在基地實(shí)訓(xùn)中,經(jīng)常用到 mini2440 這塊板子,發(fā)現(xiàn)板子上并沒有輸入法,本人就突發(fā)奇想,準(zhǔn)備開發(fā)一款用于板子上的輸入法。有了這一想法,就去網(wǎng)上搜索資料。發(fā)現(xiàn)網(wǎng)上有很多關(guān)于嵌入式輸入法的研究文檔,明白了開發(fā)嵌入式輸入法需要哪些技術(shù),最關(guān)鍵的就是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論