2

我正在根据此处的示例在输入面板小部件中实现虚拟键盘。通过发出这样的信号,我可以让字符出现在文本小部件中emit characterGenerated( char )——请参阅示例buttonClicked(QWidget *w)中的方法。不幸的是,这种方法不适用于回车键和退格键。我很感激有关可能的解决方法的建议。

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

4

2 回答 2

2

考虑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()

于 2013-07-12T19:50:26.213 回答
0

这个是特定于该示例的。通过将 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);
}
于 2014-10-18T06:09:51.513 回答