MileStone(part1)

MileStone(part1) (2009-04-05 20:14:41)

43号到现在,花了将近三天的时间来摸索在开发板上实现数据输入的问题。到现在终于有一点点进展,将之称为MileStone是为了给自己壮胆,增加信心的,达人们见笑了!

     一、为什么要在终端实现输入法

     在计算机的体系结构中,输入、输出、处理系统,存储系统是几个不可缺少的部分。我们所开发的嵌入式产品其实也是一台微小的计算机系统。在这里,处理器是ARM9,存储系统由RAMFlashSD卡组成,输出系统是触摸屏,同时通过触摸屏的点击实现了鼠标的功能,唯独没有传统电脑的键盘系统。而为了在终端设置各种各样的信息,光靠鼠标点击显然是不够灵活的,因此需要实现键盘的输入。

    硬件上增加键盘不是不可以,但又要增加系统成本,同时需要写相应的驱动,工作量也不小。所以考虑在界面上实现软键盘,也就是说“画”一个跟硬件键盘一样的界面,通过触摸屏的点击模拟手指击打键盘实现输入。

    二、实现思路:

    实现软键盘的思路大致有三个:

1、  白手起家。自己用按钮拼出一个界面,然后编写后面的事件触发函数,还要设计词码表,处理起来应该难度很大,而且搞不好系统开销很大,没有一年半载估计玩不转。

2、  借助Qtopia,在Qt的世界中,许多概念是比较让人摸不着头脑的。QtQt/EQtopia Core, Qtopia,而且又有234等版本区别,不同版本兼容性较差,这些往往让初学者摸不着头脑。下面结合个人理解做一简介:

    Qt泛指Qt的所有桌面版本,比如Qt/X11Qt WindowsQt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/UnixQt/X11

  Qt/EQt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。

  Qtopia是一个构建于Qt/E之上的类似桌面系统的应用环境,目前看来就是Qtopia Phone Editon(QPE)。相比之下,Qt/E是基础类库。

  Qtopia Core:就是原来的Qt/E,大概从Qt 4开始改名,把Qtopia Core并到Qtopia的产品线中去了。但实际上Qtopia Core就相当于原来的Qt/E,仍然作为基础类库。

另外,似乎奇趣最近又把Qtopia Core改名叫做Qt for Embedded Linux了,不知道是不是因为Qtopia Core搞得大家都很糊涂,没人来买的缘故。

值得一提的是Qt-3.x是没有Qtopia的,也就是说你不要费力去寻找Qtopia-3.x来适应你的qt/e-3.x了。如果你的程序是用Qt3开发的,而你一定要用Qtopia,两条路:一是退回2,二是根据Trolltech提供的文档进行34的升级。

很不幸,我就是用Qt3的人之一,所以现在此路不通了,只能放弃借助Qtopia,还有另外一个原因,如果用了桌面系统,到时候可能要去掉开机时候的屏幕校正程序而直接设定自己的应用程序自启动,这些东西也是挺麻烦的。

3、  直接在Qt/E-3.x上移植输入法

这是最后一条路了,也是必须要走通的一条路。上网搜了一下,这样做的比较少,但也不是没有。尤其是在http://www.hi-pda.com/forum/viewthread.php?tid=191027&extra=&page=1中几位高手长达两三年的热烈讨论,以及DeepWater前辈开发的MurphyPinyin输入法,能给人很多启发。我正是在反复阅读了该帖之后成功的。

三、具体做法

首先向开发MurphyPinyin的前辈们致敬,没有他们,不知道什么时候才能实现我想要的功能。具体做法:

1、  下载源码MurphyPinyin-src.tgz和补丁patch-softkeyboard

值得一提的是DeepWater最初上传的源码是针对zaurus的,那个东东是带了硬件键盘的,因此意味着源码中没有包含软键盘。甚至该帖第一页的源码有可能是不完善的。所以最好要到http://sourceforge.net/projects/murphypinyin/下载MurphyPinyin-0.03-src.tgz。光有这个还不行,对于我们这种没有键盘的需要一个软键盘。高人chyang在讨论的第二页,也就是70多楼的时候给出了他的patch。如果有此需要,请下载74楼的murphytalk-patch.gz或者76楼的patch-0.3.gz。我用的是后者,前者未经验证,如有人做过,请留言说明结果。

2、  解压:tar zxvf MurphyPinyin-0.03-src.tgz 产生MurphyPinyin文件夹

         tar zxvf patch-0.3.gz.

              patch解压后放在MurphyPinyin文件夹中。

3、  MurphyPinyin文件夹的只读属性去掉,并应用到子文件夹,防止打软键盘patch时候不成功。

4、  执行打补丁patch-softkeyboardPatch –p1< patch-softkeyboard。这里是1

说到patch,可能有些人不知道怎么回事,其实说白了就是把要修改的东西通过标记记录到一个文件中,要删掉的用-开头,要增加的用+开头。打开patch文件一看就明白。打补丁过程会有两问,第一个问题是否取消原来的补丁,第二个问你是否再次使用这个补丁。分别答ny

5、  修改PinyinFrame.cpp中关于配置文件和码表文件的位置。打完包主要是给PinyinFrame中加入了软键盘功能,但由于源码是针对Qtopia的,要移植到qte上,必须把与Qtopia有关的内容改成qte的类的。具体改动如下:QpinyinFrame.cppqpe相关的头文件注释掉,不去掉肯定会报错嘛。包括qpe/golbal.hqpe/qpeapplication.h这类的。QpinyinFrame.cpp中关于QPEApplication的代码注释掉。换成Qwidget的:QPEApplication::grabKetboard 对应QWidget::grabKeyboard()

QPEApplication::ungrabKetboard 对应QWidget::releaseKeyboard()

6、  核对配置文件的存放路径。由于是qte的,因此修改不是X86的那个路径,这些文件。这些文件有:3个文件(pinyin_table.txtmurphytalk_phrase_idx.txtmurphytalk.conf)位置一定按PinyinFrame.cpp里位置放好,1个文件(murphytalk_phrase.dat)位置一定按PinyinPhrase.cpp里位置放好, 你也可以改位置。你可以把文件存放到程序指定的位置,也可以修改程序中的路径为你当前文件所在位置。

你可能感兴趣的:(linux相关,qt,patch,输入法,存储系统,linux,嵌入式)