大家好!最近有个项目需要在
嵌入式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”就是剪切。
求大大解惑!!