QT 嵌入式 输入法 软键盘
2015-04-22 12:11
337 查看
设计自己的输入法需要继承QWSInputMethod。
需要重新实现:
virtual void updateHandler ( int type );
//type值是枚举变量Update, FocusIn, FocusOut, Reset, Destroyed
分别对应:拥有焦点的控件发生变化(例如QLineEdit的位置发生变化),需要输入法做出相应的改变(软键盘位置)
新控件开始拥有焦点。(需要弹出输入法)
原有控件失去焦点(需要关闭输入法)
重启输入法(可以在系统语言发生变化时,重新配置输入法)
输入法销毁(基本用不到)
不同用户的KeyBoard实现方法不一样,同时在Keyboard中继承相应的输入法。英文软键盘可参考:
http://blog.csdn.net/tandesir/article/details/7283158#comments
另外,再实现2个槽函数,用于接受软件盘或者输入法输出的字符(假如当用户按键A后,字母A需要被MyInputMethod知道)
为了让得到的字符或者字符串显示到编辑框中可以使用 sendCommitString和sendPreeditString
CommitString和PreeditString的区别是什么?
在T9输入法中,输入数字2得到字母a,再输入数字2得到字母b。a和b显示时带有下划线且闪烁。这是调用sendPreeditString实现的。PreeditString,顾名思义预编辑的。
当连续2次输入数字2后,等待一段时间后,PreeditString 'b'需要变为CommitString 'b'。这是调用sendCommitString实现的。
上面3个函数实现后,整个输入法的框架也就搞定了。剩下的就是:如何显示键盘,如何绑定输入法并输出正确的PreeditString和CommitString了。
当然,为了让QT运行时能够识别,需要进行注册:
QWSServer::setCurrentInputMethod(new MyInputMethod());
需要重新实现:
virtual void updateHandler ( int type );
//type值是枚举变量Update, FocusIn, FocusOut, Reset, Destroyed
分别对应:拥有焦点的控件发生变化(例如QLineEdit的位置发生变化),需要输入法做出相应的改变(软键盘位置)
新控件开始拥有焦点。(需要弹出输入法)
原有控件失去焦点(需要关闭输入法)
重启输入法(可以在系统语言发生变化时,重新配置输入法)
输入法销毁(基本用不到)
void MyInputMethod::updateHandler(int type) { switch(type) { case Update: //update输入法widget break; case FocusIn: { //输入控件获得焦点时,启动输入法 QWidget *focusWidget = QApplication::focusWidget(); if(focusWidget && focusWidget->focusPolicy()==Qt::StrongFocus &&mActive ==false) { //弹出输入法相关的widget ShowKeyBoard(); } } break; case FocusOut: if(mActive) { //关闭输入法相关的widget } break; case Reset: //reset inputmethod break; case Destroyed: break; } }
不同用户的KeyBoard实现方法不一样,同时在Keyboard中继承相应的输入法。英文软键盘可参考:
http://blog.csdn.net/tandesir/article/details/7283158#comments
另外,再实现2个槽函数,用于接受软件盘或者输入法输出的字符(假如当用户按键A后,字母A需要被MyInputMethod知道)
void MyInputMethod::CommitCharacter(QString str) { //将文字送入输入框内 JYZ_PrintLog("%s",str.toLocal8Bit().constData()); if(str.length()==0 && mPreEditString.length()) sendCommitString(mPreEditString); else sendCommitString(str); mPreEditString.clear(); if(mInputmethodPanel) mInputmethodPanel->Reset(); } void MyInputMethod::PreeditCharacter(QString str) { //将候选送入输入框内,同时显示下滑线 mPreEditString=str; sendPreeditString(str,0); }
为了让得到的字符或者字符串显示到编辑框中可以使用 sendCommitString和sendPreeditString
CommitString和PreeditString的区别是什么?
在T9输入法中,输入数字2得到字母a,再输入数字2得到字母b。a和b显示时带有下划线且闪烁。这是调用sendPreeditString实现的。PreeditString,顾名思义预编辑的。
当连续2次输入数字2后,等待一段时间后,PreeditString 'b'需要变为CommitString 'b'。这是调用sendCommitString实现的。
上面3个函数实现后,整个输入法的框架也就搞定了。剩下的就是:如何显示键盘,如何绑定输入法并输出正确的PreeditString和CommitString了。
当然,为了让QT运行时能够识别,需要进行注册:
QWSServer::setCurrentInputMethod(new MyInputMethod());
相关文章推荐
- QT5的软键盘输入法实现
- QtEmbedded软键盘输入法实战(附例子)
- QtEmbedded软键盘输入法实战(附例子)
- QT5的软键盘输入法实现
- qt的嵌入式平台输入法:SYSZUXpinyin移植到arm
- QtEmbed软键盘输入法
- Qt下D-Bus的具体运用(软键盘输入法的实现)
- QtEmbedded软键盘输入法实战(附例子)
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- QT5的软键盘输入法实现
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- Qt开发:UDP、TCP发送文字消息、检测U盘插拔、SYSZUXpinyin软键盘输入法移植------[源码奉送]
- 嵌入式Linux版本Qt5.4快速部署
- 嵌入式qt显示中文和隐藏鼠标
- Android软键盘使用及输入法挡住输入框的问题解决
- Qt on Android,输入法弹出后,界面无法自适应
- Android软键盘(1)---输入法界面管理(打开/关闭/状态获取)
- 基于Qt的嵌入式媒体播放器系统的设计
- Ubuntu14.04下嵌入式Qt环境搭建之安装qvfb
- 嵌入式Qt下使用科大讯飞的TTS语音模块