5

Qt (C++) で keypress および keyrelease イベントを処理する方法を学んでいます。これらすべてのイベントを処理したいクラス Keyboard があります。QObject を継承しています。マウス イベントを処理する必要はありません。アプリケーションがそのクラスに対して開かれているときに、すべてのキーボード入力をどのように指示できるかを理解しようとしています。

MainWindow クラスのレイアウトにウィジェットとして追加して非表示にしようとしました (レイアウトではなくウィジェット)。現在、それは応答していません。

MainWindow クラスでもこれを試しました。

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    keys->keyPressEvent(event); 
    //Keys is a Keyboard object with this public method:
    //void keyPressEvent(QKeyEvent *event);
} 

しかし、それもうまくいきません。私の Keyboard::Keyboard() コンストラクターには、次のものがあります。

this->setFocusPolicy(Qt::StrongFocus);

キーボード入力がそこに到達することを確認するために他に何かする必要があるかどうかはわかりません。

Qt アプリケーションのすべてのキーボード イベントをこのクラスに送信する方法を誰かが知っていれば、非常に役に立ちます。

ありがとう、

ジョン

4

1 に答える 1

7

知りたい人のために、私の質問に対する答えを見つけました。

キーボード イベントを処理するクラスのコンストラクターに、次の行を追加しました。

QWidget::grabKeyboard();

そのアプリケーションがアクティブなときのすべてのキーボード入力は、そのウィジェットに直接送られます。詳細については、リファレンスを確認してください: QWidget::grabKeyboard

注: を呼び出すまで、他の何も (つまり、他のウィジェット) はキーボード入力を取得しませんQWidget::releaseKeyboard()

于 2014-08-24T00:11:25.817 に答える