デフォルトにするとQPushButton
(他の多くのサブクラスと同様にQWidget
)、キーボードフォーカスを処理するデフォルトの方法があります。ボタンの場合、矢印キーを使用すると、キーボードのフォーカスが1つのボタンから次のボタンに移動し、ウィンドウ内を移動したり、マウスなしでウィジェットを操作したりできるようになります。
ハンクがコメントで示唆しているように、QPushButton
キーボードフォーカスを呼び出さないように強制することができますが、これは、フォーカスを盗むことができるsetFocusPolicy(Qt::NoFocus)
のがプッシュボタンだけである特定の場合にのみ機能します。QMainWindow
そこに他のウィジェット(たとえばQLineEdit
)がある場合、フォーカスがそこに到達しても、矢印キーはQLineEdit
それらのキーを取得して何もしないため、正しく機能しません。
問題を解決するためのより柔軟な方法は、各QMainWindow
の子ウィジェットにイベントフィルターをインストールし、そのイベントフィルターに矢印キーイベントをキューブを回転させる関数に転送させることです(他のすべてを通過させて許可する適切なウィジェットによって処理されるその他のイベント)。
別の解決策は、キューブウィジェットに。を使用してすべてのキーボードイベントを取得させることQWidget::grabKeyboard()
です。これにより、キーボードフォーカスがどこにあっても、すべてのキーボードイベントがそのウィジェットに送信されます。他のウィジェットにキーボードイベントを受信させたい場合は、QWidget::releaseKeyboard()
それをアングラブするために呼び出す必要があります。