3

Qt で立方体を回転させる単純なプロジェクトを行っていますが、キーボードとプッシュボタンの矢印に問題があります。

私は 2 つのプッシュ ボタンを持っています。最初のプッシュ ボタンをクリックすると、キューブは右に回転し、2 番目のプッシュ ボタンは左に回転するために使用されます。

また、キーボードには上と下の 2 つの矢印キーがあり、それらの機能はプッシュボタンと同じです。上向き矢印を押すと、立方体が右に回転します。

問題は、アプリケーションを起動すると、回転を制御する代わりに矢印がボタンを選択することです。したがって、このオプションをどこで変更できるかを知る必要があります。つまり、プッシュボタンの矢印キーのナビゲーション アクションをオフにします。

Projet は QMainWindow を継承して作られています。

4

1 に答える 1

3

デフォルトにするとQPushButton(他の多くのサブクラスと同様にQWidget)、キーボードフォーカスを処理するデフォルトの方法があります。ボタンの場合、矢印キーを使用すると、キーボードのフォーカスが1つのボタンから次のボタンに移動し、ウィンドウ内を移動したり、マウスなしでウィジェットを操作したりできるようになります。

ハンクがコメントで示唆しているように、QPushButtonキーボードフォーカスを呼び出さないように強制することができますが、これは、フォーカスを盗むことができるsetFocusPolicy(Qt::NoFocus)のがプッシュボタンだけである特定の場合にのみ機能します。QMainWindowそこに他のウィジェット(たとえばQLineEdit)がある場合、フォーカスがそこに到達しても、矢印キーはQLineEditそれらのキーを取得して何もしないため、正しく機能しません。

問題を解決するためのより柔軟な方法は、各QMainWindowの子ウィジェットにイベントフィルターをインストールし、そのイベントフィルターに矢印キーイベントをキューブを回転させる関数に転送させることです(他のすべてを通過させて許可する適切なウィジェットによって処理されるその他のイベント)。

別の解決策は、キューブウィジェットに。を使用してすべてのキーボードイベントを取得させることQWidget::grabKeyboard()です。これにより、キーボードフォーカスがどこにあっても、すべてのキーボードイベントがそのウィジェットに送信されます。他のウィジェットにキーボードイベントを受信させたい場合は、QWidget::releaseKeyboard()それをアングラブするために呼び出す必要があります。

于 2013-01-09T16:59:31.387 に答える