Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt虚拟键盘上实现退格和输入键_C++_Qt_Keyboard - Fatal编程技术网

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

C++ 在Qt虚拟键盘上实现退格和输入键,c++,qt,keyboard,C++,Qt,Keyboard,我正在基于这个示例实现一个虚拟键盘作为输入面板小部件。我可以通过发出类似于soemit characterGenerated(char)的信号让字符出现在文本小部件中——请参阅中的按钮点击(QWidget*w)方法。不幸的是,这种方法不适用于回车键和退格键。如果您能就可能的解决办法提出建议,我将不胜感激 如果是问题,我在C++中开发。 < P>考虑 MyInPtPuleCalue::Stand Mys函数。构造QKeyEvent-keyPress对象时,character.unicode()用作

我正在基于这个示例实现一个虚拟键盘作为输入面板小部件。我可以通过发出类似于so
emit characterGenerated(char)
的信号让字符出现在文本小部件中——请参阅中的
按钮点击(QWidget*w)
方法。不幸的是,这种方法不适用于回车键和退格键。如果您能就可能的解决办法提出建议,我将不胜感激


如果是问题,我在C++中开发。

< P>考虑 MyInPtPuleCalue::Stand Mys<代码>函数。构造
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信息的事件。