QT4を使用していて、右クリックのコンテキストメニューを実装するQGLWidgetを作成しました。コンテキストメニューは、マウスの右ボタンがクリックされ、Ctrlキーが押されたときにのみ表示されます。QTコンテキストメニューが表示されているときにkeyReleaseEventが表示されない
Ctrlキーを押したときに制御フラグを設定し、Ctrlキーが離されたときに(keyReleaseEvent
を介して)これをクリアすることで実装しようとしました。問題は、コンテキストメニューが起動しているときに私がkeyReleaseEvent
を受け取っていないということです(CTRLだけでなく、キーのリリースもありません)。
例:Ctrlキーを押したままマウスの右ボタンをクリックすると、コンテキストメニューが表示されます(Ctrlキーを押したまま)。メニューで何も選択せずに、私はCtrlキーを離しますが、私のプログラムはkeyPressEvent
を受け取りません。したがって、私のフラグは決してクリアされず、ユーザが次に右クリックすると(コントロールを保持しなくても)コンテキストメニューが表示されます。
コンテキストメニューが表示されているときに、なぜkeyPressEvent
が届かないのですか?
私はQT 4.8(C++)を使用しており、WindowsとLinuxの両方で同じ結果をテストしました。
contextMenuEvent経由で、またはkeyPressEvent経由でコンテキストメニューを開きますか? – Anthony
そして明確にするために、コンテキストメニューが消えるようにCTRLを放したいのですか? – Anthony
いいえ、私はマウスのプレスイベント中にexecを使って直接開きますが、CTRLを放した後は開いたままにします。何かが選択されたり他の場所でクリックされたりすると閉じます。 –