C++ 在Qt虚拟键盘上实现退格和输入键
我正在基于这个示例实现一个虚拟键盘作为输入面板小部件。我可以通过发出类似于soC++ 在Qt虚拟键盘上实现退格和输入键,c++,qt,keyboard,C++,Qt,Keyboard,我正在基于这个示例实现一个虚拟键盘作为输入面板小部件。我可以通过发出类似于soemit characterGenerated(char)的信号让字符出现在文本小部件中——请参阅中的按钮点击(QWidget*w)方法。不幸的是,这种方法不适用于回车键和退格键。如果您能就可能的解决办法提出建议,我将不胜感激 如果是问题,我在C++中开发。 < P>考虑 MyInPtPuleCalue::Stand Mys函数。构造QKeyEvent-keyPress对象时,character.unicode()用作
emit characterGenerated(char)
的信号让字符出现在文本小部件中——请参阅中的按钮点击(QWidget*w)
方法。不幸的是,这种方法不适用于回车键和退格键。如果您能就可能的解决办法提出建议,我将不胜感激
如果是问题,我在C++中开发。
< P>考虑QKeyEvent-keyPress
对象时,character.unicode()
用作第二个参数。但是,您也可以使用Qt::Key
值作为第二个参数。例如:
QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
您应该重写此方法以接受将传递给
QKeyEvent
构造函数的int
参数,并将characterGenerated(QChar)
信号更改为keycenerated(int)
,以便可以发送特殊键(Qt::key\u Backspace
)或字符键(character.unicode()
)使用相同的信号和插槽。这一个特定于该示例。我通过将sendcharacter代码(在myinputpanelcontext.cpp中)修改为此,将“*”按钮改为backspace。请看一看。希望能有帮助
void MyInputPanelContext::sendCharacter(QChar字符)
{
QPointer w=focusWidget();
如果(!w)
返回;
QKeyEvent-keyPress(QEvent::keyPress,character.unicode(),Qt::NoModifier,QString(character));
QKeyEvent-keybkspc(QEvent::KeyPress,Qt::Key_Backspace,Qt::NoModifier);
如果(字符!=“*”)
{
QApplication::sendEvent(带和按键);
}
其他的
{
QApplication::sendEvent(w和keybkspc);
}
如果(!w)
返回;
QKeyEvent keyRelease(QEvent::KeyPress,character.unicode(),Qt::NoModifier,QString());
QApplication::sendEvent(带和键释放);
}
谢谢。不幸的是,我不太确定如何使这种技术适用于没有Qt键的字符,例如欧元符号。我的解决方法基本上是测试字符,并在按下Enter或Backspace键时使用Qt::Key\u Enter
或Qt::Key\u Backspace
引发事件。否则将引发一个带有字符unicode信息的事件。