版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、畢業(yè)設計論文畢業(yè)設計論文 基于基于 qt/eqt/e 的嵌入式中文輸入法的設計與實現(xiàn)的嵌入式中文輸入法的設計與實現(xiàn) 畢業(yè)設計(論文)原創(chuàng)性聲明和使用授權說明畢業(yè)設計(論文)原創(chuàng)性聲明和使用授權說明 原創(chuàng)性聲明原創(chuàng)性聲明 本人鄭重承諾:所呈交的畢業(yè)設計(論文) ,是我個人在指導教師的 指導下進行的研究工作及取得的成果。盡我所知,除文中特別加以標注和 致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不 包含我為獲得 及其它教育機構的學位或學歷而使用過的材料。 對本研究提供過幫助和做出過貢獻的個人或集體,均已在文中作了明確的 說明并表示了謝意。 作 者 簽 名: 日 期: 指導教師簽名
2、: 日期: 使用授權說明使用授權說明 本人完全了解 大學關于收集、保存、使用畢業(yè)設計(論文) 的規(guī)定,即:按照學校要求提交畢業(yè)設計(論文)的印刷本和電子版本; 學校有權保存畢業(yè)設計(論文)的印刷本和電子版,并提供目錄檢索與閱 覽服務;學校可以采用影印、縮印、數(shù)字化或其它復制手段保存論文;在 不以贏利為目的前提下,學校可以公布論文的部分或全部內(nèi)容。 作者簽名: 日 期: 摘 要 隨著嵌入式系統(tǒng)的迅猛發(fā)展,嵌入式系統(tǒng)廣泛地運用于各個領域中,如:智能家 居、手持設備,工業(yè)系統(tǒng)等諸多領域。嵌入式系統(tǒng)的資源有限,對資源十分敏感,因 此要求嵌入式 gui 必須占用十分少的系統(tǒng)資源,而目前應用于嵌入式系統(tǒng)中
3、的中文輸 入法都占用很多的資源,導致系統(tǒng)運行緩慢,很是影響用戶的體驗。因此,目前國內(nèi) 外的用戶都殷切盼望出現(xiàn)一種系統(tǒng)級的、占用系統(tǒng)資源少的、輕量級的嵌入式中文輸 入法。諾基亞公司開發(fā)了一款面向嵌入式系統(tǒng)的 qt 版本:qt/e,是當前嵌入式 gui 開 發(fā)者比較青睞的開發(fā)工具,廣泛運用于手持電子設備的開發(fā)中。然而,目前國內(nèi)外在 qt/e 平臺下開發(fā)的嵌入式中文輸入法,是基于 x lib 庫的,占用很多的系統(tǒng)資源,不是 非常人性化。 基于上述背景,本文開發(fā)了一種輕量級的中文輸入法,該中文輸入法是基于 qt/e 平臺的。該輸入法具有良好的移植性和超強的擴展性的,然而它沒有增加系統(tǒng)的開銷, 使用戶可
4、以方便,快捷地輸入中文漢字、英文字母和各種標點符號。 本文首先闡述了開發(fā)嵌入式中文輸入法的意義以及研究現(xiàn)狀,接著介紹了需要用 到的幾個相關的技術,最后介紹了軟件的設計和實現(xiàn)的各個階段的主要工作和相關文 檔。 關鍵詞:嵌入式;qt/e;中文輸入法 abstract with the rapid development of embedded system, the embedded system is widely used in many fields, such as, intelligent household, handheld devices, industrial system, e
5、tc. 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 influence. th
6、erefore, 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, widel
7、y 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 chinese
8、 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 elaborat
9、es 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 . key words : embedded;qt/e;chinese i
10、nput metho 目 錄 1 緒論.1 1.1 課題研究的意義.1 1.2 嵌入式中文輸入法的研究現(xiàn)狀.1 1.3 課題研究內(nèi)容及目標.2 1.3.1 課題研究的內(nèi)容.2 1.3.2 課題研究的目標.2 1.3.3 開發(fā)平臺的選擇.2 2 相關技術概述.3 2.1 交叉編譯簡介.3 2.2 qt簡介 .3 2.3 qt/e 簡介.3 2.4 vim簡介 .4 3 系統(tǒng)需求分析.6 3.1 需求分析的目的.6 3.2 需求分析的地位與作用.6 3.3 系統(tǒng)應該滿足的功能.6 4 系統(tǒng)設計.8 4.1 搭建 qt/e 開發(fā)環(huán)境 .8 4.2 交叉編譯環(huán)境的搭建.11 4.3 輸入法設計.11
11、4.3.1 輸入法的原理.12 4.3.2 輸入法流程圖.12 4.3.3 關鍵模塊介紹.13 5 系統(tǒng)安裝及演示.20 5.1 系統(tǒng)安裝.20 5.2 系統(tǒng)運行截圖.21 5.2.1 輸入法懸浮窗截圖.21 5.2.2 中文輸入截圖.22 5.2.3 小寫英文輸入截圖.23 5.2.4 大寫英文輸入截圖.24 6 結論.26 參考文獻.27 致 謝.28 1 緒論 1.1 課題研究的意義 (1)嵌入式產(chǎn)業(yè)快速的發(fā)展 當今社會,嵌入式產(chǎn)業(yè)的高速發(fā)展,使嵌入式產(chǎn)品廣泛運用于各個領域中,如: 智能家電,車載 gps,手持設備,等等領域,嵌入式產(chǎn)品已經(jīng)成為人們生活中離不 開的一部分嵌入式系統(tǒng)沒有一個
12、明確的定義,目前業(yè)內(nèi)專家學者一致比較認可的定 義是:嵌入式系統(tǒng)是指以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應于應 用系統(tǒng)對功能可靠性成本體積功耗等有嚴格要求的專用計算機系統(tǒng)從定義可知, 嵌入式系統(tǒng)也是一種計算機系統(tǒng),是針對某一應用的專用計算機系統(tǒng),嵌入式系統(tǒng)可 以定制,因此,嵌入式系統(tǒng)的發(fā)展很快。 (2)輸入法在人機交互中必不可少 gui 是人機交互不可缺少的部分,一個產(chǎn)品 gui 的好壞往往決定了這個產(chǎn)品的優(yōu) 劣,而嵌入式 gui 具有下面幾個方面的基本要求:輕型占用資源少高性能高可靠性 便于移植可配置等特點一個良好的 gui 肯定要有一款人性化的輸入法嵌入式設備 的發(fā)展趨勢中,重
13、要的一點是要低功耗,盡可能的減少系統(tǒng)的開銷,因此嵌入式設備的 輸入法也需要在保持功能的前提下,將系統(tǒng)開銷降低最低。qt 的跨平臺性非常良好, 目前,大部分嵌入式 gui 用 qt 開發(fā)的。 1.2 嵌入式中文輸入法的研究現(xiàn)狀 嵌入式的迅猛發(fā)展,目前,在手持設備的移動終端中,廣泛采用以液晶觸摸顯示 屏實現(xiàn)的人性化的人機交互式 gui。人機交互 gui,在不同應用領域的場合,對人機 gui 的要求也不盡相同,一些情況下,只要求顯示和選擇一些簡單的結果和參數(shù),而 在大部分移動信息終端中,要求字符的輸入,有些智能終端中不僅要求有英文,數(shù)字 的輸入,更需要中文漢字的輸入。 目前國內(nèi)外的嵌入式中文輸入法,
14、都是在 qt/e 平臺下應用和開發(fā)的,在這平臺 下應用的,主要有兩種嵌入式中文輸入法: (1)其中一種輸入法是移植一般 pc 機 windows 系統(tǒng)下,現(xiàn)有的中文輸入法,該 輸入法是基于 qt-x11 的,移植了該中文輸入法到嵌入式設備,但該輸入法需要 windows 系統(tǒng)下的 x lib 庫的支持,這會導致系統(tǒng)需要很大的系統(tǒng)資源,很是影響系 統(tǒng)的運行效率。 (2)另外一種輸入法是使用了 qt/e 平臺自帶插件的方法,但該輸入法需要一個桌 面系統(tǒng)來管理該輸入法,為了管理該輸入法,往往移植了 qtopia 這個 qt/e 下的桌面 系統(tǒng)來管理該嵌入式中文輸入法,但是,一般的手持設備是不需要桌面
15、管理系統(tǒng)的, 該嵌入式中文輸入法給這類設備帶來了不必要的額外的開銷,造成了系統(tǒng)資源的嚴重 浪費。 1.3 課題研究內(nèi)容及目標 1.3.1 課題研究的內(nèi)容 本課題主要討論了一種基于 qt/e 的嵌入式中文拼音輸入法的研究與實現(xiàn)的方法。 課題的主要研究的內(nèi)容是:qt/e 開發(fā)環(huán)境的搭建,嵌入式現(xiàn)狀的分析,交叉編譯環(huán) 境的搭建,qt/e 體系結構的研究,中文輸入法的實現(xiàn),輸入法安裝到目標板的實現(xiàn)。 1.3.2 課題研究的目標 針對以上情況,決定組建一個界面友好,功能完善的基于 qt/e 嵌入式中文拼音 輸入法,該輸入法可以實現(xiàn)中英輸入的切換,實現(xiàn)中文,英文,數(shù)字及常用標點符號 的輸入,輸入法最大限度
16、地實現(xiàn)了易移植性和易操作性。輸入法運行穩(wěn)定、安全可靠。 1.3.3 開發(fā)平臺的選擇 本系統(tǒng)將在 linux 系統(tǒng)里,用 qtdesigner4 作為界面設計工具,vim 作為開發(fā)環(huán) 境,arm-linux-gcc-4.4.3 作為交叉編譯器,qt 為開發(fā)語言,運行環(huán)境為 qt/e。具體技 術將在下一章中介紹。 2 相關技術概述 2.1 交叉編譯簡介 交叉編譯,通俗的講就是在一個平臺上生成另一個平臺上的可執(zhí)行的代碼。所謂 的平臺,實際上包含兩個概念:體系結構、操作系統(tǒng)。同一個體系結構可以運行不同 的操作系統(tǒng);同樣,同一個操作系統(tǒng)也可以在不同的體系結構上運行。舉例來說,常 說的 x86 windo
17、ws 平臺實際上是 intel x86 體系結構和 windows for x86 操作系統(tǒng)的統(tǒng) 稱;而 x86 linux 平臺實際上是 intel x86 體系結構和 linux for x86 操作系統(tǒng)的簡稱。 嵌入式設備一般對系統(tǒng)資源比較敏感,不能運行軟件的開發(fā)環(huán)境,只執(zhí)行程序, 嵌入式設備叫做目標機;一般的 pc 機上運行開發(fā)環(huán)境和編譯器,pc 機叫做宿主機。 在宿主機平臺上開發(fā)程序,并在這個平臺上運行交叉編譯器,編譯的程序;而由交叉 編譯器生成的程序將在目標平臺上運行。 伴隨著以計算機技術、通訊技術為主的信息技術的飛速發(fā)展和互聯(lián)網(wǎng)的廣泛應用, 計算機,通訊,消費電子,三者合一將成為
18、必然趨勢。信息家電,手持設備,移動設 備等嵌入式產(chǎn)品的迅速發(fā)展,使得嵌入式軟件開發(fā)再度成為一個研究熱點。 由于嵌 入式設備的性能局限,往往不能通過本機編譯得到所需軟件的可執(zhí)行程序。因此,以 linux 為主機操作系統(tǒng),搭配一個交叉編譯系統(tǒng),為嵌入式設備生成可執(zhí)行程序已成 為現(xiàn)在日益流行的編譯嵌入式軟件的解決方案。而開放源碼的編譯器 gcc,經(jīng)過多 年的發(fā)展,已能支持幾乎所有知名廠商的處理器,是嵌入式軟件開發(fā)中理想的交叉編 譯器。 2.2 qt 簡介 qt 是諾基亞公司開發(fā)的一個跨平臺的 c+圖形用戶界面應用程序框架。它提供 給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所用功能。qt 是完全面
19、向對象 的,最有很強的擴展性,并且允許真正的組件編程。從 1996 年,qt 進入商業(yè)領域, 它已經(jīng)成為全世界范圍內(nèi)數(shù)千種成功的應用程序的基礎。qt 也是流行的 linux 桌面 環(huán)境 kde 的基礎。 qt 具有下列優(yōu)點: 優(yōu)良的跨平臺特性,面向對象, 豐富的 api,支持 2d/3d 圖形渲染,支持 opengl ,大量的開發(fā)文檔 ,xml 支持 ,webkit 引擎的集成, 可以實現(xiàn)本地界面與 web 內(nèi)容的無縫集成 。 2.3 qt/e 簡介 qt/e,全稱為 qt for embedded,是 qt 面向嵌入式開發(fā)的一個版本, 通常所說的 qt 是 qt for x11 linux
20、,是 qt 面向 pc 機的一個版本,qt for x11 linux 和 qt for embedded linux 最大的差別,在于二者要顯示界面的內(nèi)容,所依賴的顯示基礎不同, 這導致了兩者在體系結構上的根本差異。 qt for x11 linux:底層的顯示技術構建在 window 系統(tǒng)之上,完全依賴于 windows 系統(tǒng),在下層調用了 x lib 的系統(tǒng)方法來顯示界面上的圖像。 qt for embedd linux:沒有構建在 window 系統(tǒng)之上,而是構建在了 linux 系統(tǒng)下 的 framebuffer 之上,把在人機 gui 上需要展示的元素寫入 framebuffer。
21、因為在嵌入 式設備上省略了 x 系統(tǒng),大大節(jié)省了許多的不必要的系統(tǒng)開銷,需要在 gui 展示的 圖像,直接寫入了 framebuffer,節(jié)省了系統(tǒng)資源,大大加快了顯示速度。這是 qt/e 的最大優(yōu)勢。 兩者的體系結構差別,如圖 2-1 所示: 圖 2-1 qt/e 和 qt/x11 體系架構對比 因此,qt/e 具有服務端層,這一層主要負責監(jiān)聽系統(tǒng)的事件,如:主要是 keyboard 和 mouse 事件,移動終端輸出事件,管理域,管理 top 窗口,管理光標和管 理屏幕保護程序等等諸多功能。系統(tǒng)被觸發(fā)產(chǎn)生的 keyboard 和 mouse 事件,首先就 傳給服務端 層,然后服務端再根據(jù)具
22、體的實際情況把以上事件分派給,相對應的應 用程序和軟件。 2.4 vim 簡介 vim 是 linux 系統(tǒng)下最常用的文本編輯器,vim 是一個類似于 vi 的文本編輯器, vim 是 vi 的升級版,vim 在 vi 的基礎上增加了很多新的特性,vim 普遍被推崇為類 vi 編輯器中最好的一個。80 年代末,出現(xiàn)了 vim 的 1.0 版本。最初的目標只是完 全復制 vi 的功能,那個時候的 vim 是 vi imitation(模擬)的簡稱。1991 年 vim 1.14 版被 fred fish disk #591 這個 amiga 用的免費軟體集所收錄。1992 年 1.22 版本的
23、vim 被移植到了 unix 和 ms-dos 上。從此,vim 的全名就正式變成 vi improved。 vim 的發(fā)展很迅速,在這之后,vim 加入了不計其數(shù)的新功能。作為第一個里程 碑的是 1994 年的 3.0 版本加入了多視窗編輯模式(分割視窗) 。從那之后,同一屏 幕可以顯示的 vim 編輯文件數(shù)可以不止一個了。1996 年發(fā)布的 vim 4.0 是第一個 利用圖型接口(gui)的版本。1998 年 5.0 版本的 vim 加入了 highlight(語法高 亮)功能。2001 年的 vim 6.0 版本加入了代碼折疊、插件、多國語言支持、垂直分 割視窗等功能。2006 年 5
24、月發(fā)布的 vim 7.0 版更加入了拼字檢查、上下文相關補 完,標簽頁編輯等新功能?,F(xiàn)在最新的版本是 2008 年 8 月發(fā)布的 vim 7.2,該版 本合并了 vim 7.1 以來的所有修正補丁,并且加入了腳本的浮點數(shù)支持。 3 系統(tǒng)需求分析 3.1 需求分析的目的 需求分析就是要明確需求方和開發(fā)放需要開發(fā)一個什么樣的產(chǎn)品才能滿足客戶的 需求,即明確“需要干什么” ,不需要知道“怎么干” 。 本系統(tǒng)要實現(xiàn)的是一個用于嵌入式 gui 的中文拼音輸入法,因為要適用于嵌入 式平臺下,因此該輸入法應占用較少的系統(tǒng)資源,輸入法界面要美觀,輸入要方便, 中英輸入法切換要方便。 3.2 需求分析的地位與作
25、用 需求分析是開發(fā)軟件是否成功的決定因素。軟件項目中大多數(shù)的問題都是因為需 求分析不當或者是需求分析考慮不周全而導致的。在軟件需求分析的過程中,導致問 題的出現(xiàn)主要包括以下方面,包括用戶的需求不明確,需要實現(xiàn)的功能不明確, 、需 求的文檔不是很完善等,都可能造成產(chǎn)品開發(fā)的過程中的出現(xiàn)很多困難。軟件需求分 析,雖然是軟件開發(fā)整個周期的開始階段,但也是軟件開發(fā)整個周期中最為關鍵的一 個階段,關系到項目開發(fā)成敗的一個關鍵步驟。 3.3 系統(tǒng)應該滿足的功能 通過調查研究顯示,一個良好的輸入法不僅僅要使用戶輸入起來方便,更需要安 全、可靠、高效的系統(tǒng)支持。本輸入法的要求是: (1)要求具有良好的界面。
26、(2)占用系統(tǒng)資源少。 (3)輸入方便。 本系統(tǒng)需要實現(xiàn)的功能是:中文,大小寫英文,常用標點符號的輸入,具有軟鍵 盤,并支持觸摸屏,具體功能模塊如圖 3-1 所示: 圖 3-1 系統(tǒng)功能模塊圖 4 系統(tǒng)設計 4.1 搭建 qt/e 開發(fā)環(huán)境 在進行開發(fā)之前,首先決定的第一個問題就是,該使用什么開發(fā)環(huán)境來編寫該系統(tǒng)? 目前常見的嵌入式 gui,主要有 qt,gtk+幾種工具,qt 的移植性更強,基于此,本系 統(tǒng)采用 qt 來開發(fā)。 qt 是諾基亞開發(fā)的一個跨平臺性很強的基于 c+圖形用戶 gui 開發(fā)庫。開發(fā)語 言為 c+。有很多的有優(yōu)點,如:具有優(yōu)良的跨平臺特性、面向對象 、豐富的 api、
27、大量的開發(fā)文檔。 移植步驟: (1)準備好如下源碼包: qt/e 源碼包:qt-embedded-linux-opensource-src-4.5.0.tar.bz2 qt-x11 源碼包:qt-x11-opensource-src-4.5.0.tar.bz2 觸摸屏源碼包:tslib-11.4.tar.gz (2)編譯安裝 tslib-1.4 編譯 tslib-1.4 應設置好參數(shù),具體參數(shù)如圖 4-1 所示: 圖 4-1 編譯 tslib 參數(shù) (3)編譯安裝 qt-x11-4.5.0 安裝 qt-x11-4.5.0 時,最關鍵的步驟是設置 qt-x11-4.5.0 的環(huán)境變量 環(huán)境變量具
28、體如圖 4-2 所示: 圖 4-2 qt-x11-4.5.0 環(huán)境變量 (4)編譯安裝 qt/e4.5.0 編譯安裝 qt/e4.5.0 時,需設置好編譯參數(shù),具體參數(shù)如圖 4-3 所示: 圖 4-3 編譯 qt/e4.5.0 參數(shù) “-i/home/mytslib/include -l/home/ mytslib/lib ”指明剛才編譯出來觸摸屏的庫文 件及頭文件存放路徑。 “-qt-mouse-tslib”表示將使用觸摸屏。 編譯完成后,安裝時,最關鍵的步驟還是設置環(huán)境變量 具體的環(huán)境變量如圖 4-4 所示: 圖 4-4 qt/e4.5.0 環(huán)境變量 (5)移植相關庫文件至開發(fā)板 首先準備
29、一個文件系統(tǒng),根據(jù)友善提供的文檔制作了一個文件系統(tǒng),路徑為 /opt/rootfs, 其中 rootfs 就是根文件系統(tǒng)。 把編譯生成的庫文件及配置文件復制至開發(fā)板上,用 nfs 方式掛載文件系統(tǒng),把 目標庫文件等下載到開發(fā)板。 需移植到開發(fā)板的文件如圖 4-5 所示: 圖 4-5 需移植到開發(fā)板的文件 移植如上文件到開發(fā)板后,編輯開發(fā)板/etc/profile,用來在開發(fā)板上設置環(huán)境變 量,具體的環(huán)境變量如圖 4-6 所示: 圖 4-6 移植 qt/e 應設置的環(huán)境變量 設置觸摸屏的配置文件 ts.conf 把# module_raw collie 前面的“”號去掉,然后把該行移至行首,最后
30、配置文件 如圖 4-7 所示: 圖 4-7 觸摸屏配置文件 (6)驗證 tslib 是否移植成功. 在開發(fā)板終端下執(zhí)行觸摸較正程序: 在終端執(zhí)行 ./ts_calibrate 運行該程序主要是校正觸摸屏,運行 ts_calibrate 后,屏幕將出現(xiàn)五點校正畫面, 依次點擊五點后,將生成觸摸屏校正數(shù)據(jù)文件/etc/pointercal. 在開發(fā)板終端下執(zhí)行觸摸屏拖曳測試程序: 在終端執(zhí)行./ts_test 運行后屏幕出現(xiàn) drag,draw 依次選擇后進行測試,同時終端下出現(xiàn)拖曳后的取 點數(shù)據(jù) (7)驗證 qt4.5.0 是否移植成功 在宿主機上編譯好 qt 的例子程序,下載到開發(fā)板下并執(zhí)行:
31、 #./application qws font unifont 如能正常顯示,qt4.5.0 移植成功。 4.2 交叉編譯環(huán)境的搭建 (1)配置 minicom 在宿主機 redhat linux 5.0 下新建終端,在終端命令提示符后輸入 minicom -s, 回車,然后按照提示設置波特率 115200,8 位數(shù)據(jù),1 位停止位,無控制流,保存退 出。 (2)tftp 服務的配置 在終端中運行 setup-system service-tftp 增加 tftp 服務,并去掉 ipchains 和 iptables 兩項,然后在 firewall configuration,選中 no f
32、irewall,保存退出,執(zhí)行 service xinetd restart 啟動 tftp 服務。 (3)nfs 服務器的配置 在終端中運行 setup-system service-nfs,增加 nfs 服務,然后編輯文件 exports,添加與目標機共享的目錄,并設置目標機對目錄的訪問權限,重新啟動 nfs 服務。 (4)linux 內(nèi)核移植 通過并口,宿主機向目標開發(fā)板的 flash 燒寫引導程序 vivi,燒寫完畢后通過 tftp 服務把經(jīng)過裁剪的 linux 內(nèi)核鏡像文件以及根文件系統(tǒng)下載到目標板的 ram 中,然后由 dnw 完成內(nèi)核及根文件系統(tǒng)從內(nèi)存到 flash 的燒寫。最后
33、需要在宿主機安 裝主編譯器 arm-linux-gcc,用來交叉編譯應用程序。 4.3 輸入法設計 4.3.1 輸入法的原理 qt/e 是 c/s 結構,在服務端負責監(jiān)聽系統(tǒng)消息,比如:keyboard 和 mouse 消息, 而中文輸入法是一個全局性的模塊,所以在 qt/e 中,把中文輸入法的設計放在了服 務層。輸入法是屬于服務層的一部分。 qwsinputmethod 是 qt/e 的一個類,其是中文輸入法的基類,在 qwsinputmethod 這個基類中定義了一些函數(shù)用以支持輸入法的程序的設計,本文從 此基類中繼承出了一個中文輸入法的類,在該類中處理 keyboard 和 mouse
34、事件,把 接收到的 keyboard 事件按照用戶所需要輸入的漢字的拼音,從字庫中查找出之對應 的漢字,詞組,或者是一個漢語短語,發(fā)送給當前的顯示窗口,或者把用戶最后選擇 的漢字、短語或詞組發(fā)送到當前的顯示窗口。需定義一個輸入法窗口來顯示用戶當前 的輸入。 字符,漢字,英文的輸入一般分為三大步驟: (1)開始準備輸入 當用戶在軟鍵盤上按下第一個 keyboard 按鍵時,輸入法會自動創(chuàng)建出輸入法的 上下文,輸入法上下文包含 keyboard 輸入字符。 (2)選擇編輯 當有任何一個新的 keyboard 按鍵被按下的時候,輸入法就會主動嘗試著去創(chuàng)建 與 keyboard 輸入相對應的中文字符,
35、英文字符和數(shù)字等等,此時,激活了中文輸入 法的上下文,用戶可以自由的在中文輸入法的上下文中前后移動光標。 (3)輸入完成 當用戶認為輸入已經(jīng)完成的時,用戶會選擇以某種方式來選擇最終的字符串,通 常是使用 keyboard 按鍵,或者 mouse 點擊,用戶最終所選擇的字符串會被發(fā)送到當 前的編輯窗口。 4.3.2 輸入法流程圖 本輸入法的流程是:用戶輸入,軟鍵盤得到響應,系統(tǒng)判斷是否處于中文輸入狀 態(tài),是:進入中文輸入流程,否:進入英文輸入流程,具體流程圖如圖 4-8 所示: 圖 4-8 輸入法流程圖 4.3.3 關鍵模塊介紹 (1)中文輸入模塊 中文輸入模塊實現(xiàn)了中文輸入功能,用戶選擇了中文
36、輸入狀態(tài),點擊軟鍵盤,輸 入拼音,通過相應的編碼,查找到字庫中與之對應的漢字,顯示在編輯框中,用戶選 擇所需輸入的漢字,中文輸入完成。 系統(tǒng)中實現(xiàn)中文輸入的接口為: bool getkey(int,int); 其中的關鍵代碼為: 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
37、() bkeyprocessed=false; else if(k = qt:key_left|k = qt:key_up) if(!m_pinyin_frame-prev_page() bkeyprocessed=false; else if( u = 8 string:iterator pos=m_pinyin_frame- m_ime_info.pinyin.end()-1; m_pinyin_frame-m_ime_info.pinyin.erase(pos); m_pinyin_frame-search(); bupdate=true; (2)英文輸入模塊 英文輸入模塊實現(xiàn)了英文輸入
38、功能,用戶選擇了英文輸入模式,點擊軟鍵盤,輸 入字母,系統(tǒng)發(fā)送字符到輸入框,英文輸入完成。 系統(tǒng)中實現(xiàn)英文輸入的接口為: bool sendkey(int u , int c); 關鍵代碼為: 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(); (3)輸入窗口界面實
39、現(xiàn) 輸入窗口界面由軟鍵盤,中英文輸入法的切換按鍵,顯示拼音的輸入框,顯示漢 語字符的顯示框組成。 軟鍵盤要實現(xiàn),漢語拼音,大寫英文,小寫英文,常用標點符號的輸入,因此, 軟鍵盤的體積比較大,而一般手持設備的顯示屏都比較小,基于此,需要一鍵多用, 來節(jié)省軟鍵盤的空間,把按鍵上需要顯示的文本寫在一個 xml 文檔中,通過讀取該 文檔來顯示按鍵上的文本:例如:,3 鍵對應序號為 nr=”17”,初始化時 pushbutton 3 鍵 text 設置為“3” ,當按下“shift”時,text 設置為“#” 。 軟鍵盤界面如圖 4-9 所示: 圖 4-9 軟鍵盤界面 因為沒有桌面管理系統(tǒng),本輸入法設計
40、了一個浮動窗,用于打開軟鍵盤和中英文 輸入切換,如圖 4-10 所示: 圖 4-10 浮動窗 浮動窗上顯示“中” ,表示輸入法,處于中文輸入模式,點擊“中” ,切換到英文 輸入模式。點擊鍵盤,輸入法彈出軟鍵盤。 關鍵代碼為: 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.height(); i
41、nt 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 size unsigned int width = 160; the first row - pinyin inputed qfontmetrics metric=painter.fontmetri
42、cs(); 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(0,0,0); qpen penpage (qcolor(0,0,255); vertical line whic
43、h seperates chinese/english indicator with pinyin inputed painter.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_b
44、makingphrase) 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
45、=qstring:fromutf8(makephrase_close); painter.setpen(pentext); painter.drawtext(x,y,s); temp = metric.boundingrect(s); x+=temp.width()+2; (4)輸入法安裝卸載功能的實現(xiàn) 設計開發(fā)輸入法,最關鍵的就是能具有安裝功能,這樣系統(tǒng)中才會有輸入法模塊, 輸入才能工作,實現(xiàn)該功能的接口為: void xinputmethod:installinputmethod(); 此接口中,調用 setcurrentinputmethod 函數(shù)為當前的設備安裝輸入法模塊, setcu
46、rrentinputmethod 函數(shù)為 qt/e 的 qwsserver 類的一個成員函數(shù), setcurrentinputmethod 函數(shù)的參數(shù)設置為 null,就是卸載輸入法模塊: 關鍵代碼為: void xinputmethod:installinputmethod() xinputmethod* pim = instance(); if (pim) qwsserver:setcurrentinputmethod(pim); void xinputmethod:releaseinputmethod() if (xinputmethodprivate:pinputmethod) qws
47、server:setcurrentinputmethod(null); delete xinputmethodprivate:pinputmethod; xinputmethodprivate:pinputmethod = null; xinputmethod* xinputmethod:instance() if (null = xinputmethodprivate:pinputmethod) xinputmethodprivate:pinputmethod = new xinputmethod(); return xinputmethodprivate:pinputmethod; (5)
48、輸入法鍵盤事件的過濾實現(xiàn) 實現(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 的鍵盤對應, modifiers: 此參數(shù)是表示有沒有其它的輔助的 keyboard 按鍵同時被 press, ispress: 此參數(shù)表示 keyboard 按鍵是被
49、用戶按下,還是被輸入法釋放, autorepeat: 此參數(shù)表示這個 keyboard 按鍵事件是不是自動重復產(chǎn)生的事件 函數(shù)的返回值為真,表示當前的 keyboard 按鍵事件已經(jīng)被 qt/e 處理了,不需要 輸入法繼續(xù)分發(fā)該事件,返回值為假,表示該 keyboard 按鍵事件沒有被 qt/e 處理, 繼續(xù)分發(fā)該 keyboard 按鍵事件。 關鍵代碼為: if (iswork m_pinyin_frame-update(); return true; else if(unicode=65535 | unicode=8 | unicode=13 | unicode=27) if(initmo
50、d 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 庫文件,方便在項目中調用。 在輸入法的主文件中,直接 make ,編譯生成四個 lib 文件 libmurphytalk.so libmurphytalk.so.1 libmurphytalk.so.1.0 libmurphytalk.so.1.0.0 然后把以上庫文件下載至開發(fā)板的 qt
51、/e 的 lib 目錄下。 將這四個文件,放到 qte 的 lib 文件夾下,然后在 qte 的 include 文件夾下,建 立文件夾 embeddedtype,并將相應的頭文件依照下圖的形式,放入此文件夾中,如 此在 qte 庫中就有了 embeddedtype 輸入法,如圖 5-1 所示: 圖 5-1 輸入法頭文件截圖 用戶開發(fā) gui 時,在項目的 main.cpp 函數(shù)中,必須調用 if (qapplication:guiserver = type) qpinyinimpl:installinputmethod(); if (qapplication:guiserver = type
52、) qpinyinimpl:releaseinputmethod(); 來安裝和卸載輸入法,使用的時候,只要在主函數(shù)中,實現(xiàn)安裝和卸載輸入法的過程 就可以調用輸入法。 在項目文件中加入 embeddedtype 庫,在 makefile 中添加: libs+=-lmurphytalk qmake 與 make 之后,需要將 embeddedtype 文件夾中的字庫文件和配置文件下 載到開發(fā)板. 在開發(fā)板根目錄中的/etc 文件夾下,建立 embeddedtype 文件夾。 并將 embeddedtype 文件夾中相應的文件復制到這個文件夾下,如圖 5-2: 圖 5-2 輸入法字庫和配置文件截圖
53、 輸入法安裝完成。 5.2 系統(tǒng)運行截圖 5.2.1 輸入法懸浮窗截圖 因為沒有桌面管理系統(tǒng)來管理中文輸入法,因此本輸入法開發(fā)了一個輸入法的置 頂?shù)膽腋〈?,懸浮窗上顯示“中”字,表示輸入法處在中文輸入模式,用戶可以方便, 快捷的輸入中文短語,中文詞組,用戶如想要切換到英文輸入模式,只需點擊“中” , “中”會變成“英” ,表示輸入法進入了英文輸入模式,用戶可以方便的輸入英文字 母。懸浮窗中部有一個小鍵盤的圖標,此圖標是用于打開或關閉軟鍵盤的,單擊小鍵 盤,輸入法彈出軟鍵盤,再點擊小鍵盤,輸入法關閉小鍵盤。輸入法懸浮窗,如圖 5- 3 所示。 圖 5-3 輸入法懸浮窗 5.2.2 中文輸入截圖
54、用戶選擇中文輸入模式,就可以方便地輸入中文。用戶點擊軟鍵盤上的按鍵,輸 入需求的漢字對應的拼音,輸入法根據(jù)拼音從字庫中查找出與之對應的漢字發(fā)送到當 前的編輯窗口,用戶在選擇自己所要輸入的漢字。如圖 5-4 所示 圖 5-4 中文輸入 5.2.3 小寫英文輸入截圖 用戶選擇了小寫英文輸入模式,用戶單擊按鍵,輸入英文字母,在輸入框中顯示 出用戶輸入的字母,如圖 5-5 所示 圖 5-5 小寫英文輸入 5.2.4 大寫英文輸入截圖 用戶選擇了大寫英文輸入模式,用戶單擊按鍵,輸入英文字母,在輸入框中顯示 出用戶輸入的字母,如圖 5-6 所示 圖 5-6 大寫英文輸入 6 結論 通過這次畢業(yè)設計,認識的到了本人的實際水平。剛準備做畢業(yè)設計時,真的是 無從下手,不知道做什么合適。在基地實訓中,經(jīng)常用到 mini2440 這塊板子,發(fā)現(xiàn) 板子上并沒有輸入法,本人就突發(fā)奇想,準備開發(fā)一款用于板子上的輸入法。 有了這一想法,就去網(wǎng)上搜索資料。發(fā)現(xiàn)網(wǎng)上有很多關于嵌入式輸入法的研究文 檔,明白了開發(fā)嵌入式輸入法需要哪些技術,最關鍵的就是 qt/e,以前在學校并沒 有學過,就買了本書自學,在學的過程中,發(fā)現(xiàn)了 qt 的優(yōu)點,特別是跨平臺性很強 大,越來越對 qt 感興趣。 在設計過程中,總是遇到這樣或那樣的問題
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行大堂經(jīng)理課程設計
- 2024股權轉讓及保密協(xié)議合同
- 2024生豬養(yǎng)殖產(chǎn)業(yè)鏈上下游聯(lián)合采購合同書3篇
- 2024版職慧錦囊職慧錦囊之勞動合同
- 2024版工程車簡單運輸合同
- 2025年度化妝品試用銷售合同范本3篇
- 2025年度新型智能倉庫房租賃合同書3篇
- 2025年度彩色打印業(yè)務承攬合同模板下載3篇
- 2024版水電站承包經(jīng)營合同協(xié)議
- 2024版英文合同范本范例
- 【大學課件】微型計算機系統(tǒng)
- (主城一診)重慶市2025年高2025屆高三學業(yè)質量調研抽測 (第一次)英語試卷(含答案)
- 2025關于標準房屋裝修合同的范本
- 中國建材集團有限公司招聘筆試沖刺題2025
- 2024年馬克思主義基本原理知識競賽試題70題(附答案)
- 2024年湖北省中考物理真題含解析
- 荔枝病蟲害防治技術規(guī)程
- 資金借貸還款協(xié)議
- 《實驗性研究》課件
- 中國革命戰(zhàn)爭的戰(zhàn)略問題(全文)
- 《阻燃材料與技術》課件全套 顏龍 第1講 緒論 -第11講 阻燃性能測試方法及分析技術
評論
0/150
提交評論