基于嵌入式QTE的输入法基本方法

 

QtE的输入法框架必须提供一个QWSInputMethod类的实例, 所以在输入法中要实现一个QWSInputMethod类的派生类,即子类QWSInputMethod *input; 在此派生类中显示和操作软键盘widget并完成与输入法框架的通讯。 QWSServer进程调用(即你的主窗体)QWSServer::setCurrentInputMethod(QWSInputMethod*)激活该输入法后, 输入法框架会把应用程序的信息发送给QWSInputMethod类, 由QWSInputMethod的虚函数来处理。 所以最核心的部分变成怎样去实现一个QWSInputMethod的派生类,另外怎么让你的软键盘窗口能和程序输入窗口和QWSInputMethod和平共存,可以在软键盘类中的构造函数加入QWidget(0 , Qt::Tool | Qt::WindowStaysOnTopHint),软键盘中有过个按钮可以利用QSignMapper类的派生类,用若干个按钮连接一个槽,来执行相应的输入(这里是QSignMapper的基本用法)。  QWSInputMethod提供的sendPreeditString方法负责将预处理的文本发送给焦点窗体, 一般情况下编辑器会将此文本显示为带下划线或虚线的文本, 表示这是编辑过程中的半成品; 然后QWSInputMethod::sendCommitString函数负责发送最终用户确认的文本给编辑框。

QWSInputMethod派生类还应该去实现updateHandler虚函数,该虚函数是输入法框架和输入法之间的桥梁, 专门向输入法发送一些状态信息, 比如在焦点离开或进入编辑框时updateHandler函数就会被调用到, 在这里加入你的输入法的处理可以实现在适当时机显示或隐藏输入法widget(软键盘)等功能。

下面是实现的代码:

 

#include "inputmethod.h"
#include "widget.h"
InputMethod::InputMethod()
{
    keyMap = new KeyMap(this);
 keyMap->hide();
}
InputMethod::~InputMethod()
{

}
void InputMethod::sendPreString(const QString &newString)
{
    if(newString == "Del")
    {
        inputString.resize(inputString.length()-1);
        this->sendPreeditString(inputString,0);
    }
    else
    {
        inputString += newString;
        this->sendPreeditString(inputString,0);
    }
}
void InputMethod::confirmString()
{
    this->sendCommitString(inputString);
    inputString.clear();
}
void InputMethod::updateHandler(int type)
{
 switch(type)
 {
 case QWSInputMethod::FocusOut:
  inputString.clear();
  //keyMap->hide();
 case QWSInputMethod::FocusIn:
  keyMap->show();
 default:
  break;
 }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厦门Linux嵌入式+Qt开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值