2010-11-22 2 views
1

Qt Creatorでフォームを作成し、3つのカスタムQWidgets(すべてがRendererという同じクラスです)をフォームに追加しました。ユーザーがAltキーを押したときに通知されるフォーム以外の3つのウィジェットがすべて必要ですが、現時点では動作させることさえできません。Qt 4.6とOpenGL:一度に3つの異なるウィジェットでキーボードプレスをキャプチャする方法は?

void keyPressEvent(QKeyEvent *)とvoid keyReleaseEvent(QKeyEvent *)をRendererクラスに追加しましたが、関数はまったく呼び出されませんでした...(ブレークポイントはトリガーされませんでした)

void Renderer::keyPressEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = true; 
     cout << "alt got pressed" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

void Renderer::keyReleaseEvent(QKeyEvent *event) { 
    switch(event->key()) { 
    case Qt::Key_Alt: { 
     isAltPressed = false; 
     cout << "alt released" << endl; 
     break; 
    } 
    default: 
     break; 
    } 
} 

ここに何か不足していますか?

また、3つのウィジェットでキーボードプレスを同時に登録するには、何か特別なことはありますか?

ありがとうございます。

+0

回答しました。 2番目の質問では、privateメンバー変数ではなくクラス変数をisAltPressedにすることで問題を解決しました。 – confusedKid

答えて

3

​​は何ですか?キーボードイベントは、フォーカスのあるウィジェットにのみ移動します(他のハンドラを自分で呼び出すことができます)。

+0

私は以前focusPolicyを使っていませんでしたが、正直なところ聞いていませんでした。(Qtのために)これまで...私にこれについてもっと知るためのリンクを教えていただけますか? – confusedKid

+0

リンクが追加されました。私はQt自身の経験はほとんどありませんでしたが、フォーカスのあるウィンドウに移動するキー押下イベントのルールはかなり普遍的です。デフォルトのポリシーが「焦点がない」ことを確認したとき、私はあなたが二重チェックを提案する価値があると思った。 –

+0

リンクがもう動作しないようです。 – someuser

関連する問題