我正在根据此处的示例在输入面板小部件中实现虚拟键盘。通过发出这样的信号,我可以让字符出现在文本小部件中emit characterGenerated( char )
——请参阅示例buttonClicked(QWidget *w)
中的方法。不幸的是,这种方法不适用于回车键和退格键。我很感激有关可能的解决方法的建议。
如果重要的话,我正在用 C++ 开发。
考虑MyInputPanelContext::sendCharacter
链接示例中的功能。QKeyEvent keyPress
构造对象时,character.unicode()
用作第二个参数。但是,您也可以使用Qt::Key
值作为第二个参数。例如:
QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
您应该重写此方法以接受int
将传递给QKeyEvent
构造函数的参数并将characterGenerated(QChar)
信号更改为,以便您可以使用相同的信号和槽keyGenerated(int)
发送特殊键 ( Qt::Key_Backspace
) 或字符键 ( )。character.unicode()
这个是特定于该示例的。通过将 sendcharacter 代码(在 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);
}