問題タブ [qevent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
385 参照

c++ - event->type() をすでにチェックしている場合、QEvent dynamic_cast の結果をチェックする必要がありますか?

QEventtype()イベントタイプを列挙値として返すメンバー関数があります。既にチェックした場合、dynamic_cast結果をチェックする必要があります。例えばQEvent*event->type()

if (ke)ここに条件は必要ですか?

0 投票する
1 に答える
56 参照

linux - QMenu を閉じたときに Mac OS と Linux で出力される QEvent タイプの違い

アプリケーションで QMenu を使用しています。QMenu の外側をクリックして閉じると、Qt はいくつかのイベントを発行します。Linux では、次のイベントが発生することがわかりました。

Mac OS では、発行されるイベントは次のとおりです。

QMenu を閉じると、Mac 環境では QEvent::MouseButtonPress が発行されないことがわかります。それが Qt のバグなのか、それとも意図的な動作なのかを知りたいです。

私のコードでは、QMenu を継承するカスタム メニュー クラスでオーバーライドした mousePressEvent() メソッドで、QMenu が閉じられたときのマウス クリックの座標を計算しています。しかし、上記の理由により、Mac OS ではアプリケーション全体が壊れています。

Qt バージョン 5.12.3を使用しています

0 投票する
2 に答える
541 参照

c++ - Qt QDialog が隠れないようにする

私のアプリケーションウィンドウにはすべて、設定などのための QDialog コンテキストメニューがあり、マウスの右クリックでアクセスできます。これらのダイアログ ボックスの 1 つで、ユーザーにアクションを警告するポップアップ (QMessageBox) を表示したいのですが、Qt では一度にしかダイアログ ボックスを表示できず、新しいダイアログ ボックスを開くと現在のダイアログ ボックスは非表示になります。それらは、私が維持する必要がある機能であるフォーカスなどを失ったときにも隠されます。

非表示イベントをキャプチャするために使用できるイベントフィルターを見てきましたが、非表示が実際に行われるのをブロックできないようです。イベントで true を返すか、accept を設定するかの組み合わせは、効果がないようです。

コンテキスト メニューは、実際には QDialog のカスタム実装です (myQDialog と呼びましょう)。そこで、そこで関数をオーバーライドし、新しい非表示関数で使用されたものhide()を追加bool preventHidingして、ダイアログを実際に非表示にする必要があるかどうかを判断しようとしました。直接呼び出すhide();と、オーバーライドされた関数が呼び出されますが、確認ボックスを表示したり、ダイアログ ボックスの外側をクリックしたりすると、非表示イベントがトリガーされますが、オーバーライドされた関数はトリガーされません。(コードにイベントフィルターが存在する場合と存在しない場合でこれを試しました)。

setVisible()代わりに、表示/非表示から呼び出されるものをオーバーライドしました。これは一貫して呼び出され、以下の実装によりダイアログが閉じなくなりますが、元のダイアログの上部に表示されているにもかかわらず、メッセージ ボックスをクリックできません。

非表示をキャプチャして停止する方法、または元のダイアログを表示し続けながら、それが作成するメッセージ ボックスと対話する方法はありますか?