Qtで次のようなプログラムを書いています:
メイン ウィンドウは私のクラスWindow : QWidget
で、QGridLayout
他の 4 つのウィジェット (Input_Menu : QWidget
とOutput_Menu : QWidget
、そして 2 Canvas : QWidget
)を含む があります。
ユーザーがキーを押したときに特定のイベントをトリガーしたいと考えています。問題は、Window
時々フォーカスを失うことです(それは、に行くInput_Menu
、またはおそらくInput_Menu
...のボタンに行きます)
次の解決策を試しましたが、不十分な (そして汚れている) ようです。
- 焦点
Window
を失うたびに焦点を当てます。 - キーボード イベントを受信するたびに、
Window
の関数 (またはそのクローン)をトリガーするフォーカスを持つ可能性のある各ウィジェットに通知します。KeyPressEvent
理想的には、ウィジェットがイベント (キーボード イベントなど) を受け取り、それをどう処理すればよいかわからない場合、親のイベント ハンドラーを自動的に呼び出す必要があります。これが Qt のデフォルト機能であることを望んでいましたが、そうは見えません。一方で、フォーカス全体については本当に混乱していて、何が起こっているのかよくわかりません。誰かが私にこれを説明できますか: 私はstd::cout << "key pressed" << std::endl;
自分のWindow::KeyPressEvent
関数に a を含めました。プログラムを最初に実行したとき、フォーカスが の一番上の QComboBox にあるようですInput_Menu
。上/下キーを押すと、そのボックス内を移動し、コンソールに「キーが押されました」と表示されません。ほとんどの文字をヒットしても何も起こりません。しかし、左/右キーを押すと、コンソールに「キーが押されました」と表示されます!?
あなたの洞察を前もって感謝します。