QT 嵌入式 输入法 软键盘

设计自己的输入法需要继承QWSInputMethod。
需要重新实现:
    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());
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值