在Qt虚拟键盘上实现退格键和输入键

时间:2013-07-12 18:34:14

标签: c++ qt keyboard

我正在基于示例here在输入面板小部件中实现虚拟键盘。通过发出类似emit characterGenerated( char )的信号,我可以在文本小部件中显示字符 - 请参阅example中的buttonClicked(QWidget *w)方法。不幸的是,这种方法不适用于enter和backspace键。我很感激建议可能的解决方法。

如果重要,我正在用C ++开发。

2 个答案:

答案 0 :(得分:2)

在链接示例中考虑MyInputPanelContext::sendCharacter函数。构造QKeyEvent keyPress对象时,character.unicode()用作第二个参数。但是,您也可以使用Qt::Key值作为第二个参数。例如:

QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);

您应该重写此方法以接受将传递给int构造函数的QKeyEvent参数,并将characterGenerated(QChar)信号更改为keyGenerated(int),以便您可以发送特殊密钥({ {1}})或使用相同信号和插槽的字符键(Qt::Key_Backspace)。

答案 1 :(得分:0)

这个特定于该示例。我转过来了' *'通过将发送字符代码(在myinputpanelcontext.cpp中)修改为此按钮来退格。请看一看。希望它有所帮助。

 void MyInputPanelContext::sendCharacter(QChar character)
 {
 QPointer<QWidget> w = focusWidget();

 if (!w)
     return;


 QKeyEvent keyPress(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString(character));
 QKeyEvent keybkspc(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
 if(character != '*')
 {
    QApplication::sendEvent(w, &keyPress);
 }
 else
 {
     QApplication::sendEvent(w, &keybkspc);
 }
 if (!w)
     return;

 QKeyEvent keyRelease(QEvent::KeyPress, character.unicode(), Qt::NoModifier, QString());
 QApplication::sendEvent(w, &keyRelease);
 }