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