• 5602阅读
  • 2回复

[提问]Qt/E里用QWSInputMethod软键盘类如何输入小写字母 [复制链接]

上一主题 下一主题
离线guoguiyang
 

只看楼主 正序阅读 楼主  发表于: 2013-04-10
大家好!最近有个项目需要在嵌入式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)这样实现:
  1. void IPMethod::slot_sendKey(int key)
  2. {
  3.     QWSServer::sendKeyEvent(key,key,Qt::NoModifier,true,false);
  4. }

Qt::NoModifier是枚举常量Qt::KeyboardModifier。


整个软键盘,并没用sendCommitString()和sendPreeditString()函数,测试显示字符正常。

问题如下:

软键盘输出的字母都是大写,现在我想输入小写字母,怎么操作?(不用sendCommitString()和sendPreeditString()传QString


还有,上述代码改为
  1. void IPMethod::slot_sendKey(int key)
  2. {
  3.     QWSServer::sendKeyEvent(key,key,Qt::ShiftModifier,true,false);
  4. }

无效果,查阅Qt文档,Qt::ShiftModifier说明是:SHIFT按键已经按下。按理说,默认输出是大写字符,SHIFT按下后应该输出小写字符啊。Qt/E中怎么毫无效果?


另外,如果把Qt::ShiftModifier改为Qt::ControlModifier,及:CTRL按键已按下,倒是有效果。此时按“A”就是“全选”,按“X”就是剪切。




求大大解惑!!

离线guoguiyang

只看该作者 2楼 发表于: 2013-04-10
搞定了。。
自己学艺不精,sendKeyEvent()的形参没搞懂。。
重新看了遍帮助,发现这个函数第一个形参是unicode……这下子好办了。
我直接操作unicode,当软键盘选择小写的时候,把Qt::Key_A~Qt::Key_Z对应的unicode加上0x20就行了!出来的就是小写字母。
离线guoguiyang

只看该作者 1楼 发表于: 2013-04-10
补充:如果用sendCommitString()直接传QString,我知道代码怎么写。

现在俺就想用sendKeyEvent()直接输出小写字符啊~~~~

另外,如果
sendKenEvent()第一个形参设为-1,倒是可以输出小写字符,不过这样总感觉没有什么意义。难道Qt::ShiftModifier是白给的?
快速回复
限100 字节
 
上一个 下一个