标题:Qt/E里用QWSInputMethod软键盘类如何输入小写字母
作者:guoguiyang
日期:2013-04-10 13:55
内容:
大家好!最近有个项目需要在嵌入式Linux系统中做个简单的软键盘,查看了一些资料,参考网上的代码用QWSInputMethod做:
实现两个类:(1)软键盘界面类InputWidget(2)QWSInputMethod的继承类IpMethod
软键盘界面类InputWidget中,用QButtonGroup添加ui里的各种按钮,如:
this->button_group->addButton(ui->key_A,Qt::Key_A);
然后在InputWidget的构造函数explicit InputWidget(IPMethod * ipm,QWidget *parent=0);里:
QObject::connect(this->button_group,SIGNAL(buttonClicked(int)),ipm,SLOT(slot_sendKey(int)));
其中,IPMethod类中的槽函数slot_sendKey(int)这样实现:
void IPMethod::slot_sendKey(int key)
{
QWSServer::sendKeyEvent(key,key,Qt::NoModifier,true,false);
}
Qt::NoModifier是枚举常量Qt::KeyboardModifier。
整个软键盘,并没用sendCommitString()和sendPreeditString()函数,测试显示字符正常。
问题如下:
软键盘输出的字母都是大写,现在我想输入小写字母,怎么操作?(不用sendCommitString()和sendPreeditString()传QString)
还有,上述代码改为
void IPMethod::slot_sendKey(int key)
{
QWSServer::sendKeyEvent(key,key,Qt::ShiftModifier,true,false);
}
无效果,查阅Qt文档,Qt::ShiftModifier说明是:SHIFT按键已经按下。按理说,默认输出是大写字符,SHIFT按下后应该输出小写字符啊。Qt/E中怎么毫无效果?
另外,如果把Qt::ShiftModifier改为Qt::ControlModifier,及:CTRL按键已按下,倒是有效果。此时按“A”就是“全选”,按“X”就是剪切。
求大大解惑!!
#1 [guoguiyang 04-10 14:00]
补充:如果用sendCommitString()直接传QString,我知道代码怎么写。
现在俺就想用sendKeyEvent()直接输出小写字符啊~~~~
另外,如果
sendKenEvent()第一个形参设为-1,倒是可以输出小写字符,不过这样总感觉没有什么意义。难道Qt::ShiftModifier是白给的?
#2 [guoguiyang 04-10 15:08]
搞定了。。
自己学艺不精,sendKeyEvent()的形参没搞懂。。
重新看了遍帮助,发现这个函数第一个形参是unicode……这下子好办了。
我直接操作unicode,当软键盘选择小写的时候,把Qt::Key_A~Qt::Key_Z对应的unicode加上0x20就行了!出来的就是小写字母。