Qt_e输入法程序设计指南计算机二级考试

文章作者 100test 发表时间 2009:07:25 10:24:08
来源 100Test.Com百考试题网


  编辑特别推荐:

  全国计算机等级考试(等考)指定教材

  全国计算机等级考试学习视频

  全国计算机等级考试网上辅导招生

  全国计算机等级考试时间及科目预告

  百考试题教育全国计算机等级考试在线测试平台

  全国计算机等级考试资料下载

  全国计算机等级考试论坛

  计算机等级考试四级应用题解析汇总

  2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库

  注,本输入法设计 指南针对Qt for Embedded Linux 4.5.1,并且以中文输入法 为例做说明,并且本文只是侧重于说明Qt/Embedded对输入法的支持接口,并不涉及到如何把键盘输入转换为中文所对应的编码方法。对其它Qt版本的适用性未曾验证。
  大家都知道,Qt for Embedded Linux是Client/Server结构,在Server端负责监听系统消息,尤其是键盘和鼠标消息,而输入法又是一个全局性的模块,所以在Qt /Embedded中,就把输入法的设计放在了Server这一层上。具体来说,就是,输入法是属于Server层的一部分。
  Qt/e 输入法基类,QWSInputMethod,在这个基类中定义了一些接口用以支持输入法程序设计,我们需要做的就是从QWSInputMethod这个类继承出一个输入法类,在这个类中处理键盘和鼠标事件,把接收到的键盘事件按照输入法的编码规则转换为对应的中文,一个汉字,或者是一个中文短语,我们可以把这个正在输入过程中的汉字或者短语发送给当前的编辑窗口,或者把最终用户的选择发送到当前编辑窗口。我们需要自己定义一个输入法窗口来显示用户当前的输入,我们可以称之为IME Window。
  文字的输入一般分为三个步骤 :
  1,开始输入
  当用户在键盘上按下第一个按键的时候,输入法上下文就被创建出来,这个输入法上下文包含键盘输入字符
  2,编辑
  当有任何一个新的按键被按下的时候,输入法就会尝试着去创建与键盘输入相对应的中文字符,这个时候,输入法上下文处于激活状态,用户可以在这个输入法上下文中前后移动光标。
  3,完成输入
  在用户认为输入已经完成的时候,用户会选择以某种方式来选择最终的字符串,通常是使用键盘按键;或者鼠标点击;用户所选择的字符串最终应该被发送到当前的编辑窗口。
  QWSInputMethod类是Qte提供的、专门为输入法程序设计的基类,这个类定义了一系列的通用接口来对输入法提供支持,现在,让我们来看看这个类所定义的几个主要的接口:
  virtual bool filter(int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ).
  这个接口的作用就是过滤键盘事件,详细一点儿说,就是我们可以在这个函数中处理键盘输入,并且根据相应的输入法规则把键盘输入转换为相应的中文。这个函数的参数含义如下:
  unicode:Qte统一使用的键盘按键编码,本文中,我们不使用这个参数
  keycode: 键值,Qt定义了一系列的键值与键盘一一对应,具体定义在Qt namespace中,比如说,Qt::Key_Left, Qt::Key_Up, Qt::Key_Right, Qt::Key_Down,这四个定义对应到四个方向键,Qt::Key_0则对应数字键0,Qt::Key_A则对应大写字母A,等等。详细列表请参考 Qt在线文档
  modifiers: 这个参数表示是否有其它的辅助按键同时被按下,比如,Alt, Ctrl, Shift,等,其预定义值如下:
  Qt::NoModifier, 没有辅助键被按下
  Qt::ShiftModifier, Shift键被按下
  Qt::ControlModifier, Ctrl键被按下
  Qt::AltModifier, Alt键被按下
  Qt::MetaModifier, Meta键被按下
  Qt::KeypadModifier, keypad 的按键被按下
  Qt::GroupSwitchModifier,仅用于X11,Mode_switch键被按下
  更多解释请参考Qt在线文档
  这些定义相互之间并不冲突,它们是按照“与”的关系组合在一起,在我们的使用中,我们可以用C 的&.操作符来判断某一个建是否被按下,比如,如果我们需要判断Alt键是否被按下,就应该这样做:
  if (Qt::AltModifier &. modifiers)
  {
  //Alt键被按下
  }
  isPress: 这个参数表示键是被按下(press),还是被释放(release)
  autoRepeat: 这个参数表示这个按键事件是否是自动重复产生的
  返回值:返回true表示这个按键事件已经被处理了,不需要继续分发;返回false表示这个按键没有被处理,Qt会继续分发这个事件
  void sendCommitString(const QString &. commitString, int replaceFromPosition = 0, int replaceLength = 0).
  这个接口函数表示把相应的字符串发送到当前编辑窗口,一般用于在用户作出最终的选择之后,把相应的字符串发送出去。
  void sendPreeditString(const QString &. preeditString, int cursorPosition, int 0selectionLength = 0).
  把当前正在编辑的字符串发送给当前编辑窗口

  2009年9月全国计算机等级考试时间及科目预告

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  全国计算机等级考试历年真题及答案

  2009年上半年全国计算机等级考试试题及答案



相关文章


常用数据类型使用转换详解计算机二级考试
C 实例:求2至N(2≤N≤500)之间的素数计算机二级考试
C 系统相关:如何安全终止线程计算机二级考试
Windows平台下常用进程间通信的实现方式计算机二级考试
Qt_e输入法程序设计指南计算机二级考试
全国计算机二级C_C 资料辅导汇总之WinAPI字符及字符串函数计算机二级考试
计算机二级C基础:虚拟构造函数的用处计算机二级考试
计算机二级C语言辅导:指针与储物箱的关系计算机二级考试
计算机二级辅导:C语言中随机函数应用计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛