私は多くのボタン、ユーザがやりとりできるウィジェットなどを持つQtプログラムを持っています。
プログラムの一段階で、私はすべてのウィジェットを一時的に「動作を停止」したいと思います。マウスクリックに振る舞いを止め、イベントを1つの関数に渡します。 Qt - すべてのイベントまたはウィンドウの機能を一時的に無効にしますか?
、そしてもちろんクリックボタンは、ボタンのバインドされた機能を実行させてはならない。
これを行う正しい(最も抽象的で分かりやすい)方法は何ですか?
(あまり新しいコードを含まない、つまり、すべてのウィジェットをサブクラス化しない)
Qtにはこれ用に何かがありますか?
これまでのところ、私は解決策がこれを組み込むことができ
QObject.findChildren(QtGui.QWidget)
を呼び出すことによって、(プログラム内のすべてのウィジェットの一覧を取得することができる午前
私の現在の恐ろしいアイデアがされている;。
- 機能ですべてのアプリケーションイベントをどのように処理し、アプリケーションが必要なときにイベントを許可しないのかイオンは休眠する。
- 休眠が必要なときは、 マウスをクリックしてウィンドウ全体にストレッチする新しい透過ウィジェットを作成します。クリックして下にあるウィジェットの座標を とする。
- 何とかウィンドウの新しい 'シェル'インスタンスを作成します。
THANKS!
(ひどい書き込みアップのため申し訳ありませんが、わずかなラッシュで)
のpython 2.7.2
PyQt4
のWindows 7
これはまさにソリューションです。 。すべてのイベントを「盗みたい」場合は、qAppにイベントフィルタを設定してください。子どもがそれらを受け取らないようにします。 – synthesizerpatel
イベントフィルタリングは何も行いませんでした。すべてのイベントは無視されますが、ボタンをクリックしても機能は実行されます。(私がばかげて私が何をしているのかわからない限り) –
さらに処理されるイベントを停止したい場合は、eventFilter()からtrueを返すようにしてください。また、すべてのイベントをフィルタリングすることは非常に悪い考えです。ユーザーの入力をフィルタリングするだけです。これを達成するさらに簡単な方法は、トップレベルのウィジェットでsetEnabled(false)を呼び出すことです。 –