2

ここの例に基づいて、入力パネルウィジェットのように仮想キーボードを実装しています。このように信号を発することで、テキスト ウィジェットに文字を表示させることができました。のメソッドemit characterGenerated( char )を参照してください。残念ながら、このアプローチはエンター キーとバックスペース キーでは機能しません。可能な回避策についてアドバイスをいただければ幸いです。buttonClicked(QWidget *w)

問題があれば、私は C++ で開発しています。

4

2 に答える 2

2

MyInputPanelContext::sendCharacterリンクされた例の機能を検討してください。QKeyEvent keyPressオブジェクトが構築されるときcharacter.unicode()、2 番目の引数として使用されます。ただし、Qt::Key値を 2 番目の引数として使用することもできます。例えば:

QKeyEvent keyPress(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);

このメソッドを書き直して、コンストラクターintに渡される引数を受け取り、シグナルを に変更して、同じシグナルとスロットを使用して特殊キー ( ) または文字キー ( ) を送信できるようにする必要があります。QKeyEventcharacterGenerated(QChar)keyGenerated(int)Qt::Key_Backspacecharacter.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 に答える