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

下載本文檔

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

文檔簡(jiǎn)介

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

2、說(shuō)明使用授權(quán)說(shuō)明本人完全了解 大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉?jī)?nèi)容。作者簽名: 日 期: 摘 要隨著嵌入式系統(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)中的中文輸入法都占用很多的資源,導(dǎo)致系統(tǒng)

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

4、首先闡述了開(kāi)發(fā)嵌入式中文輸入法的意義以及研究現(xiàn)狀,接著介紹了需要用到的幾個(gè)相關(guān)的技術(shù),最后介紹了軟件的設(shè)計(jì)和實(shí)現(xiàn)的各個(gè)階段的主要工作和相關(guān)文檔。關(guān)鍵詞:嵌入式;qt/e;中文輸入法abstractwith the rapid development of embedded system, the embedded system is widely used in many fields, such as, intelligent household, handheld devices, industrial system, etc. embedded system limited resour

5、ces, 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 influence. therefore, the users at home and abr

6、oad 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, widely used in the development of porta

7、ble 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 chinese input method, this chinese input

8、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 elaborates the significance of developing

9、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 .key words : embedded;qt/e;chinese input metho目 錄1 緒論.11.1 課題研究的意義.11.2

10、 嵌入式中文輸入法的研究現(xiàn)狀.11.3 課題研究?jī)?nèi)容及目標(biāo).21.3.1 課題研究的內(nèi)容.21.3.2 課題研究的目標(biāo).21.3.3 開(kāi)發(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 開(kāi)發(fā)環(huán)境 .84.2 交叉編譯環(huán)境的搭建.114.3 輸入法設(shè)計(jì).114.3.1 輸入法的原理.124.3.2 輸入法流程圖.124.3.3 關(guān)鍵模塊介紹.135 系統(tǒng)安裝及演示.20

11、5.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致 謝.281 緒論 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)成為人們生活中離不開(kāi)的一部分嵌入式系統(tǒng)沒(méi)有一個(gè)明確的定義,目前業(yè)內(nèi)專家學(xué)者一致比較認(rèn)可的定義是:嵌入式系統(tǒng)是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能可靠性成本體積功

12、耗等有嚴(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)是要低功耗,盡可能的減少系統(tǒng)的開(kāi)銷,因此嵌入式設(shè)備的輸入法也需要在保持功能的前提下,將系統(tǒng)開(kāi)銷降低最低。qt 的跨平臺(tái)性非常良好,目前,大部分嵌入式 gui

13、用 qt 開(kāi)發(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ó)內(nèi)外的嵌入式中文輸入法,都是在 qt/e 平臺(tái)下應(yīng)用和開(kāi)發(fā)的,在這平臺(tái)下應(yīng)用的,主要有兩種嵌入式中文輸入法:(1)其中一種輸入法是移植一般 pc 機(jī) windows 系統(tǒng)下,現(xiàn)有的中文輸入法,該輸入法是基于

14、qt-x11 的,移植了該中文輸入法到嵌入式設(shè)備,但該輸入法需要windows 系統(tǒng)下的 x lib 庫(kù)的支持,這會(huì)導(dǎo)致系統(tǒng)需要很大的系統(tǒng)資源,很是影響系統(tǒng)的運(yùn)行效率。(2)另外一種輸入法是使用了 qt/e 平臺(tái)自帶插件的方法,但該輸入法需要一個(gè)桌面系統(tǒng)來(lái)管理該輸入法,為了管理該輸入法,往往移植了 qtopia 這個(gè) qt/e 下的桌面系統(tǒng)來(lái)管理該嵌入式中文輸入法,但是,一般的手持設(shè)備是不需要桌面管理系統(tǒng)的,該嵌入式中文輸入法給這類設(shè)備帶來(lái)了不必要的額外的開(kāi)銷,造成了系統(tǒng)資源的嚴(yán)重浪費(fèi)。1.3 課題研究?jī)?nèi)容及目標(biāo)1.3.1 課題研究的內(nèi)容本課題主要討論了一種基于 qt/e 的嵌入式中文拼音輸入

15、法的研究與實(shí)現(xiàn)的方法。課題的主要研究的內(nèi)容是:qt/e 開(kāi)發(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 開(kāi)發(fā)平臺(tái)的選擇本系統(tǒng)將在 linux 系統(tǒng)里,用 qtdesigner4 作為界面設(shè)計(jì)工具,vim 作為開(kāi)發(fā)環(huán)境,arm-linux-gcc-4.4.3 作

16、為交叉編譯器,qt 為開(kāi)發(fā)語(yǔ)言,運(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)行。舉例來(lái)說(shuō),常說(shuō)的 x86 windows 平臺(tái)實(shí)際上是 intel x86 體系結(jié)構(gòu)和 windows for x86 操作系統(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)資源比較

17、敏感,不能運(yùn)行軟件的開(kāi)發(fā)環(huán)境,只執(zhí)行程序,嵌入式設(shè)備叫做目標(biāo)機(jī);一般的 pc 機(jī)上運(yùn)行開(kāi)發(fā)環(huán)境和編譯器,pc 機(jī)叫做宿主機(jī)。在宿主機(jī)平臺(tái)上開(kāi)發(fā)程序,并在這個(gè)平臺(tái)上運(yùn)行交叉編譯器,編譯的程序;而由交叉編譯器生成的程序?qū)⒃谀繕?biāo)平臺(tái)上運(yùn)行。伴隨著以計(jì)算機(jī)技術(shù)、通訊技術(shù)為主的信息技術(shù)的飛速發(fā)展和互聯(lián)網(wǎng)的廣泛應(yīng)用,計(jì)算機(jī),通訊,消費(fèi)電子,三者合一將成為必然趨勢(shì)。信息家電,手持設(shè)備,移動(dòng)設(shè)備等嵌入式產(chǎn)品的迅速發(fā)展,使得嵌入式軟件開(kāi)發(fā)再度成為一個(gè)研究熱點(diǎn)。 由于嵌入式設(shè)備的性能局限,往往不能通過(guò)本機(jī)編譯得到所需軟件的可執(zhí)行程序。因此,以linux 為主機(jī)操作系統(tǒng),搭配一個(gè)交叉編譯系統(tǒng),為嵌入式設(shè)備生成可執(zhí)行

18、程序已成為現(xiàn)在日益流行的編譯嵌入式軟件的解決方案。而開(kāi)放源碼的編譯器 gcc,經(jīng)過(guò)多年的發(fā)展,已能支持幾乎所有知名廠商的處理器,是嵌入式軟件開(kāi)發(fā)中理想的交叉編譯器。2.2 qt 簡(jiǎn)介qt 是諾基亞公司開(kāi)發(fā)的一個(gè)跨平臺(tái)的 c+圖形用戶界面應(yīng)用程序框架。它提供給應(yīng)用程序開(kāi)發(fā)者建立藝術(shù)級(jí)的圖形用戶界面所需的所用功能。qt 是完全面向?qū)ο蟮?,最有很?qiáng)的擴(kuò)展性,并且允許真正的組件編程。從 1996 年,qt 進(jìn)入商業(yè)領(lǐng)域,它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應(yīng)用程序的基礎(chǔ)。qt 也是流行的 linux 桌面環(huán)境 kde 的基礎(chǔ)。 qt 具有下列優(yōu)點(diǎn): 優(yōu)良的跨平臺(tái)特性,面向?qū)ο螅?豐富的 api,支持 2

19、d/3d 圖形渲染,支持 opengl ,大量的開(kāi)發(fā)文檔 ,xml 支持 ,webkit 引擎的集成,可以實(shí)現(xiàn)本地界面與 web 內(nèi)容的無(wú)縫集成 。2.3 qt/e 簡(jiǎn)介qt/e,全稱為 qt for embedded,是 qt 面向嵌入式開(kāi)發(fā)的一個(gè)版本, 通常所說(shuō)的qt 是 qt for x11 linux ,是 qt 面向 pc 機(jī)的一個(gè)版本,qt for x11 linux 和 qt for embedded linux 最大的差別,在于二者要顯示界面的內(nèi)容,所依賴的顯示基礎(chǔ)不同,這導(dǎo)致了兩者在體系結(jié)構(gòu)上的根本差異。qt for x11 linux:底層的顯示技術(shù)構(gòu)建在 window 系

20、統(tǒng)之上,完全依賴于windows 系統(tǒng),在下層調(diào)用了 x lib 的系統(tǒng)方法來(lái)顯示界面上的圖像。qt for embedd linux:沒(méi)有構(gòu)建在 window 系統(tǒng)之上,而是構(gòu)建在了 linux 系統(tǒng)下的 framebuffer 之上,把在人機(jī) gui 上需要展示的元素寫入 framebuffer。因?yàn)樵谇度胧皆O(shè)備上省略了 x 系統(tǒng),大大節(jié)省了許多的不必要的系統(tǒng)開(kāi)銷,需要在 gui 展示的圖像,直接寫入了 framebuffer,節(jié)省了系統(tǒng)資源,大大加快了顯示速度。這是 qt/e的最大優(yōu)勢(shì)。兩者的體系結(jié)構(gòu)差別,如圖 2-1 所示:圖 2-1 qt/e 和 qt/x11 體系架構(gòu)對(duì)比因此,qt

21、/e 具有服務(wù)端層,這一層主要負(fù)責(zé)監(jiān)聽(tīng)系統(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.4 vim 簡(jiǎn)介vim 是 linux 系統(tǒng)下最常用的文本編輯器,vim 是一個(gè)類似于 vi 的文本編輯器,vim 是 vi 的升級(jí)版,vim 在 vi 的基礎(chǔ)上增加了很多新的特性,vim 普遍被推崇為類vi 編輯器中最好的一個(gè)。80 年代末,出現(xiàn)了 vim

22、 的 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ā)展很迅速,在這之后,vim 加入了不計(jì)其數(shù)的新功能。作為第一個(gè)里程碑的是 1994 年的 3.0 版本加入了多視窗編輯模式(分割視窗) 。從那之后,同一屏幕可以顯示的 vim 編輯文件數(shù)可以不止一個(gè)了。19

23、96 年發(fā)布的 vim 4.0 是第一個(gè)利用圖型接口(gui)的版本。1998 年 5.0 版本的 vim 加入了 highlight(語(yǔ)法高亮)功能。2001 年的 vim 6.0 版本加入了代碼折疊、插件、多國(guó)語(yǔ)言支持、垂直分割視窗等功能。2006 年 5 月發(fā)布的 vim 7.0 版更加入了拼字檢查、上下文相關(guān)補(bǔ)完,標(biāo)簽頁(yè)編輯等新功能?,F(xiàn)在最新的版本是 2008 年 8 月發(fā)布的 vim 7.2,該版本合并了 vim 7.1 以來(lái)的所有修正補(bǔ)丁,并且加入了腳本的浮點(diǎn)數(shù)支持。3 系統(tǒng)需求分析3.1 需求分析的目的需求分析就是要明確需求方和開(kāi)發(fā)放需要開(kāi)發(fā)一個(gè)什么樣的產(chǎn)品才能滿足客戶的需求,即

24、明確“需要干什么” ,不需要知道“怎么干” 。本系統(tǒng)要實(shí)現(xiàn)的是一個(gè)用于嵌入式 gui 的中文拼音輸入法,因?yàn)橐m用于嵌入式平臺(tái)下,因此該輸入法應(yīng)占用較少的系統(tǒng)資源,輸入法界面要美觀,輸入要方便,中英輸入法切換要方便。3.2 需求分析的地位與作用需求分析是開(kāi)發(fā)軟件是否成功的決定因素。軟件項(xiàng)目中大多數(shù)的問(wèn)題都是因?yàn)樾枨蠓治霾划?dāng)或者是需求分析考慮不周全而導(dǎo)致的。在軟件需求分析的過(guò)程中,導(dǎo)致問(wèn)題的出現(xiàn)主要包括以下方面,包括用戶的需求不明確,需要實(shí)現(xiàn)的功能不明確, 、需求的文檔不是很完善等,都可能造成產(chǎn)品開(kāi)發(fā)的過(guò)程中的出現(xiàn)很多困難。軟件需求分析,雖然是軟件開(kāi)發(fā)整個(gè)周期的開(kāi)始階段,但也是軟件開(kāi)發(fā)整個(gè)周期中

25、最為關(guān)鍵的一個(gè)階段,關(guān)系到項(xiàng)目開(kāi)發(fā)成敗的一個(gè)關(guān)鍵步驟。3.3 系統(tǒng)應(yīng)該滿足的功能通過(guò)調(diào)查研究顯示,一個(gè)良好的輸入法不僅僅要使用戶輸入起來(lái)方便,更需要安全、可靠、高效的系統(tǒng)支持。本輸入法的要求是:(1)要求具有良好的界面。(2)占用系統(tǒng)資源少。(3)輸入方便。 本系統(tǒng)需要實(shí)現(xiàn)的功能是:中文,大小寫英文,常用標(biāo)點(diǎn)符號(hào)的輸入,具有軟鍵盤,并支持觸摸屏,具體功能模塊如圖 3-1 所示:圖 3-1 系統(tǒng)功能模塊圖4 系統(tǒng)設(shè)計(jì)4.1 搭建 qt/e 開(kāi)發(fā)環(huán)境在進(jìn)行開(kāi)發(fā)之前,首先決定的第一個(gè)問(wèn)題就是,該使用什么開(kāi)發(fā)環(huán)境來(lái)編寫該系統(tǒng)? 目前常見(jiàn)的嵌入式 gui,主要有 qt,gtk+幾種工具,qt 的移植性更

26、強(qiáng),基于此,本系統(tǒng)采用 qt 來(lái)開(kāi)發(fā)。qt 是諾基亞開(kāi)發(fā)的一個(gè)跨平臺(tái)性很強(qiáng)的基于 c+圖形用戶 gui 開(kāi)發(fā)庫(kù)。開(kāi)發(fā)語(yǔ)言為 c+。有很多的有優(yōu)點(diǎn),如:具有優(yōu)良的跨平臺(tái)特性、面向?qū)ο?、豐富的 api、大量的開(kāi)發(fā)文檔。移植步驟:(1)準(zhǔn)備好如下源碼包:qt/e 源碼包:qt-embedded-linux-opensource-src-4.5.0.tar.bz2qt-x11 源碼包:qt-x11-opensource-src-4.5.0.tar.bz2觸摸屏源碼包:tslib-11.4.tar.gz(2)編譯安裝 tslib-1.4編譯 tslib-1.4 應(yīng)設(shè)置好參數(shù),具體參數(shù)如圖 4-1 所示

27、:圖 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è)置好編譯參數(shù),具體參數(shù)如圖 4-3 所示:圖 4-3 編譯 qt/e4.5.0 參數(shù) “-i/home/mytslib/include -l/home/ mytslib/lib ”指明剛才編譯出來(lái)觸摸屏的庫(kù)文件及頭文件存放路徑。 “-qt-mouse-tslib”表示將使用觸摸屏

28、。編譯完成后,安裝時(shí),最關(guān)鍵的步驟還是設(shè)置環(huán)境變量具體的環(huán)境變量如圖 4-4 所示:圖 4-4 qt/e4.5.0 環(huán)境變量(5)移植相關(guān)庫(kù)文件至開(kāi)發(fā)板首先準(zhǔn)備一個(gè)文件系統(tǒng),根據(jù)友善提供的文檔制作了一個(gè)文件系統(tǒng),路徑為/opt/rootfs, 其中 rootfs 就是根文件系統(tǒng)。把編譯生成的庫(kù)文件及配置文件復(fù)制至開(kāi)發(fā)板上,用 nfs 方式掛載文件系統(tǒng),把目標(biāo)庫(kù)文件等下載到開(kāi)發(fā)板。需移植到開(kāi)發(fā)板的文件如圖 4-5 所示:圖 4-5 需移植到開(kāi)發(fā)板的文件移植如上文件到開(kāi)發(fā)板后,編輯開(kāi)發(fā)板/etc/profile,用來(lái)在開(kāi)發(fā)板上設(shè)置環(huán)境變量,具體的環(huán)境變量如圖 4-6 所示:圖 4-6 移植 qt/

29、e 應(yīng)設(shè)置的環(huán)境變量設(shè)置觸摸屏的配置文件 ts.conf把# module_raw collie 前面的“”號(hào)去掉,然后把該行移至行首,最后配置文件如圖 4-7 所示:圖 4-7 觸摸屏配置文件(6)驗(yàn)證 tslib 是否移植成功.在開(kāi)發(fā)板終端下執(zhí)行觸摸較正程序:在終端執(zhí)行 ./ts_calibrate 運(yùn)行該程序主要是校正觸摸屏,運(yùn)行 ts_calibrate 后,屏幕將出現(xiàn)五點(diǎn)校正畫(huà)面,依次點(diǎn)擊五點(diǎn)后,將生成觸摸屏校正數(shù)據(jù)文件/etc/pointercal.在開(kāi)發(fā)板終端下執(zhí)行觸摸屏拖曳測(cè)試程序:在終端執(zhí)行./ts_test 運(yùn)行后屏幕出現(xiàn) drag,draw 依次選擇后進(jìn)行測(cè)試,同時(shí)終端下

30、出現(xiàn)拖曳后的取點(diǎn)數(shù)據(jù)(7)驗(yàn)證 qt4.5.0 是否移植成功在宿主機(jī)上編譯好 qt 的例子程序,下載到開(kāi)發(fā)板下并執(zhí)行:#./application qws font unifont如能正常顯示,qt4.5.0 移植成功。4.2 交叉編譯環(huán)境的搭建(1)配置 minicom在宿主機(jī) redhat linux 5.0 下新建終端,在終端命令提示符后輸入 minicom -s,回車,然后按照提示設(shè)置波特率 115200,8 位數(shù)據(jù),1 位停止位,無(wú)控制流,保存退出。(2)tftp 服務(wù)的配置在終端中運(yùn)行 setup-system service-tftp 增加 tftp 服務(wù),并去掉 ipchain

31、s 和iptables 兩項(xiàng),然后在 firewall configuration,選中 no firewall,保存退出,執(zhí)行service xinetd restart 啟動(dòng) tftp 服務(wù)。(3)nfs 服務(wù)器的配置在終端中運(yùn)行 setup-system service-nfs,增加 nfs 服務(wù),然后編輯文件exports,添加與目標(biāo)機(jī)共享的目錄,并設(shè)置目標(biāo)機(jī)對(duì)目錄的訪問(wèn)權(quán)限,重新啟動(dòng) nfs服務(wù)。(4)linux 內(nèi)核移植通過(guò)并口,宿主機(jī)向目標(biāo)開(kāi)發(fā)板的 flash 燒寫引導(dǎo)程序 vivi,燒寫完畢后通過(guò)tftp 服務(wù)把經(jīng)過(guò)裁剪的 linux 內(nèi)核鏡像文件以及根文件系統(tǒng)下載到目標(biāo)板的

32、ram中,然后由 dnw 完成內(nèi)核及根文件系統(tǒng)從內(nèi)存到 flash 的燒寫。最后需要在宿主機(jī)安裝主編譯器 arm-linux-gcc,用來(lái)交叉編譯應(yīng)用程序。4.3 輸入法設(shè)計(jì)4.3.1 輸入法的原理qt/e 是 c/s 結(jié)構(gòu),在服務(wù)端負(fù)責(zé)監(jiān)聽(tīng)系統(tǒng)消息,比如:keyboard 和 mouse 消息,而中文輸入法是一個(gè)全局性的模塊,所以在 qt/e 中,把中文輸入法的設(shè)計(jì)放在了服務(wù)層。輸入法是屬于服務(wù)層的一部分。qwsinputmethod 是 qt/e 的一個(gè)類,其是中文輸入法的基類,在qwsinputmethod 這個(gè)基類中定義了一些函數(shù)用以支持輸入法的程序的設(shè)計(jì),本文從此基類中繼承出了一個(gè)中

33、文輸入法的類,在該類中處理 keyboard 和 mouse 事件,把接收到的 keyboard 事件按照用戶所需要輸入的漢字的拼音,從字庫(kù)中查找出之對(duì)應(yīng)的漢字,詞組,或者是一個(gè)漢語(yǔ)短語(yǔ),發(fā)送給當(dāng)前的顯示窗口,或者把用戶最后選擇的漢字、短語(yǔ)或詞組發(fā)送到當(dāng)前的顯示窗口。需定義一個(gè)輸入法窗口來(lái)顯示用戶當(dāng)前的輸入。字符,漢字,英文的輸入一般分為三大步驟:(1)開(kāi)始準(zhǔn)備輸入當(dāng)用戶在軟鍵盤上按下第一個(gè) keyboard 按鍵時(shí),輸入法會(huì)自動(dòng)創(chuàng)建出輸入法的上下文,輸入法上下文包含 keyboard 輸入字符。(2)選擇編輯當(dāng)有任何一個(gè)新的 keyboard 按鍵被按下的時(shí)候,輸入法就會(huì)主動(dòng)嘗試著去創(chuàng)建與

34、keyboard 輸入相對(duì)應(yīng)的中文字符,英文字符和數(shù)字等等,此時(shí),激活了中文輸入法的上下文,用戶可以自由的在中文輸入法的上下文中前后移動(dòng)光標(biāo)。(3)輸入完成當(dāng)用戶認(rèn)為輸入已經(jīng)完成的時(shí),用戶會(huì)選擇以某種方式來(lái)選擇最終的字符串,通常是使用 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)中文輸入模塊中文輸入模塊實(shí)現(xiàn)了中文輸入功能

35、,用戶選擇了中文輸入狀態(tài),點(diǎn)擊軟鍵盤,輸入拼音,通過(guò)相應(yīng)的編碼,查找到字庫(kù)中與之對(duì)應(yīng)的漢字,顯示在編輯框中,用戶選擇所需輸入的漢字,中文輸入完成。系統(tǒng)中實(shí)現(xiàn)中文輸入的接口為:bool getkey(int,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_pa

36、ge() bkeyprocessed=false; else if(k = qt:key_left|k = qt:key_up) if(!m_pinyin_frame-prev_page() bkeyprocessed=false; else if( u = 8 & k = qt:key_backspace) if(m_pinyin_frame-m_ime_info.pinyin.size()0) printf(key_backspace heren); string:iterator pos=m_pinyin_frame-m_ime_info.pinyin.end()-1; m_pinyin

37、_frame-m_ime_info.pinyin.erase(pos); m_pinyin_frame-search(); bupdate=true; (2)英文輸入模塊英文輸入模塊實(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-rel

38、easekeyboard(); m_pinyin_frame-resetstate(); m_pinyin_frame-m_engine.save_table(); (3)輸入窗口界面實(shí)現(xiàn)輸入窗口界面由軟鍵盤,中英文輸入法的切換按鍵,顯示拼音的輸入框,顯示漢語(yǔ)字符的顯示框組成。軟鍵盤要實(shí)現(xiàn),漢語(yǔ)拼音,大寫英文,小寫英文,常用標(biāo)點(diǎn)符號(hào)的輸入,因此,軟鍵盤的體積比較大,而一般手持設(shè)備的顯示屏都比較小,基于此,需要一鍵多用,來(lái)節(jié)省軟鍵盤的空間,把按鍵上需要顯示的文本寫在一個(gè) xml 文檔中,通過(guò)讀取該文檔來(lái)顯示按鍵上的文本:例如:,3 鍵對(duì)應(yīng)序號(hào)為 nr=”17”,初始化時(shí)pushbutton 3

39、鍵 text 設(shè)置為“3” ,當(dāng)按下“shift”時(shí),text 設(shè)置為“#” 。軟鍵盤界面如圖 4-9 所示:圖 4-9 軟鍵盤界面因?yàn)闆](méi)有桌面管理系統(tǒng),本輸入法設(shè)計(jì)了一個(gè)浮動(dòng)窗,用于打開(kāi)軟鍵盤和中英文輸入切換,如圖 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)

40、;int width=170;printf(text metric is %d,%dn,rect.width(),rect.height();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

41、first row - pinyin inputed qfontmetrics metric=painter.fontmetrics();qrect rect = metric.boundingrect(qchar(zhong);int x=pinyin_x;int y=pinyin_y;painter.drawtext(x,rect.height(),qchar(m_benglishmode?ying:zhong);qpen pengray (qcolor(128,128,128);qpen penwhite(qcolor(255,255,255);qpen pentext (qcolor(

42、0,0,0);qpen penpage (qcolor(0,0,255);vertical line which 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();i

43、nt x=x+rect.width()+7;int y=rect.height();if(m_bmakingphrase)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.boundingrec

44、t(m_ime_info.phrase);x+=temp.width();s=qstring:fromutf8(makephrase_close);painter.setpen(pentext);painter.drawtext(x,y,s);temp = metric.boundingrect(s);x+=temp.width()+2;(4)輸入法安裝卸載功能的實(shí)現(xiàn)設(shè)計(jì)開(kāi)發(fā)輸入法,最關(guān)鍵的就是能具有安裝功能,這樣系統(tǒng)中才會(huì)有輸入法模塊,輸入才能工作,實(shí)現(xiàn)該功能的接口為:void xinputmethod:installinputmethod();此接口中,調(diào)用 setcurrentinput

45、method 函數(shù)為當(dāng)前的設(shè)備安裝輸入法模塊,setcurrentinputmethod 函數(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 (xinputmethodpr

46、ivate:pinputmethod) qwsserver:setcurrentinputmethod(null); delete xinputmethodprivate:pinputmethod; xinputmethodprivate:pinputmethod = null; xinputmethod* xinputmethod:instance()if (null = xinputmethodprivate:pinputmethod) xinputmethodprivate:pinputmethod = new xinputmethod(); return xinputmethodpri

47、vate:pinputmethod;(5)輸入法鍵盤事件的過(guò)濾實(shí)現(xiàn)實(shí)現(xiàn)鍵盤事件過(guò)濾的接口為: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ù)是表示有沒(méi)有其它的輔助的 keyboard 按鍵同時(shí)被 press,ispress: 此參數(shù)表示

48、 keyboard 按鍵是被用戶按下,還是被輸入法釋放,autorepeat: 此參數(shù)表示這個(gè) keyboard 按鍵事件是不是自動(dòng)重復(fù)產(chǎn)生的事件函數(shù)的返回值為真,表示當(dāng)前的 keyboard 按鍵事件已經(jīng)被 qt/e 處理了,不需要輸入法繼續(xù)分發(fā)該事件,返回值為假,表示該 keyboard 按鍵事件沒(méi)有被 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

49、= false; m_pinyin_frame-update(); return true; else if(unicode=65535 | unicode=8 | unicode=13 | unicode=27) if(initmod & unicode=13) initmod = false; sendkey(unicode,keycode);/ return true; goto end; else sendkey(unicode,keycode); if(initmod) initmod = false; return true; 5 系統(tǒng)安裝及演示5.1 系統(tǒng)安裝把輸入法編譯成 qt

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

51、戶開(kāi)發(fā) gui 時(shí),在項(xiàng)目的 main.cpp 函數(shù)中,必須調(diào)用if (qapplication:guiserver = type) qpinyinimpl:installinputmethod();if (qapplication:guiserver = type) qpinyinimpl:releaseinputmethod();來(lái)安裝和卸載輸入法,使用的時(shí)候,只要在主函數(shù)中,實(shí)現(xiàn)安裝和卸載輸入法的過(guò)程就可以調(diào)用輸入法。 在項(xiàng)目文件中加入 embeddedtype 庫(kù),在 makefile 中添加:libs+=-lmurphytalkqmake 與 make 之后,需要將 embedded

52、type 文件夾中的字庫(kù)文件和配置文件下載到開(kāi)發(fā)板.在開(kāi)發(fā)板根目錄中的/etc 文件夾下,建立 embeddedtype 文件夾。并將 embeddedtype 文件夾中相應(yīng)的文件復(fù)制到這個(gè)文件夾下,如圖 5-2:圖 5-2 輸入法字庫(kù)和配置文件截圖輸入法安裝完成。5.2 系統(tǒng)運(yùn)行截圖5.2.1 輸入法懸浮窗截圖因?yàn)闆](méi)有桌面管理系統(tǒng)來(lái)管理中文輸入法,因此本輸入法開(kāi)發(fā)了一個(gè)輸入法的置頂?shù)膽腋〈?,懸浮窗上顯示“中”字,表示輸入法處在中文輸入模式,用戶可以方便,快捷的輸入中文短語(yǔ),中文詞組,用戶如想要切換到英文輸入模式,只需點(diǎn)擊“中” ,“中”會(huì)變成“英” ,表示輸入法進(jìn)入了英文輸入模式,用戶可以方

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

54、小寫英文輸入5.2.4 大寫英文輸入截圖 用戶選擇了大寫英文輸入模式,用戶單擊按鍵,輸入英文字母,在輸入框中顯示出用戶輸入的字母,如圖 5-6 所示圖 5-6 大寫英文輸入6 結(jié)論通過(guò)這次畢業(yè)設(shè)計(jì),認(rèn)識(shí)的到了本人的實(shí)際水平。剛準(zhǔn)備做畢業(yè)設(shè)計(jì)時(shí),真的是無(wú)從下手,不知道做什么合適。在基地實(shí)訓(xùn)中,經(jīng)常用到 mini2440 這塊板子,發(fā)現(xiàn)板子上并沒(méi)有輸入法,本人就突發(fā)奇想,準(zhǔn)備開(kāi)發(fā)一款用于板子上的輸入法。有了這一想法,就去網(wǎng)上搜索資料。發(fā)現(xiàn)網(wǎng)上有很多關(guān)于嵌入式輸入法的研究文檔,明白了開(kāi)發(fā)嵌入式輸入法需要哪些技術(shù),最關(guān)鍵的就是 qt/e,以前在學(xué)校并沒(méi)有學(xué)過(guò),就買了本書(shū)自學(xué),在學(xué)的過(guò)程中,發(fā)現(xiàn)了 qt 的優(yōu)點(diǎn),特別是跨平臺(tái)性很強(qiáng)大,越來(lái)越

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論