2011-08-11 34 views
1

私はqtプログラムを作成しており、次の要件を満たしています。QTイベントの問題

クリックせずに30秒が経過したら、画面をロックします。 30秒後にもう一度クリックすると、ログイン画面にリダイレクトされます。

私はイベントに関するqtドックを読んでおり、マウスイベントを処理するには1または2のどちらかの方法が必要と考えています。

1. qAppのイベントフィルタのインストール qAppのイベントフィルタは、アプリケーション内のすべてのオブジェクトに送信されたすべてのイベントを監視します。

2. QApplication :: notify()の再実装。 QtのイベントループとsendEvent()は、イベントをディスパッチするためにこの関数を呼び出します。それを再実装することで、他の誰よりも前にイベントを見ることができます。

彼らも私にとって強力なようですが、私はその違いを理解していません。 私の要件にはどちらが適していますか?ありがとうございました。

答えて

2

の前にQApplication :: notify(またはそのオーバーライド)がと呼び出されるという点を除いて、どちらのソリューションでも同じことができます。

最初のアプローチでは、QApplicationをサブクラス化する必要はありませんが、通常は優先されます。QApplication :: notifyをオーバーライドする唯一の理由は、とにかく他の理由でオーバーライドする必要がある場合です。あなた自身のカスタムイベントに関連する何かをする必要があるからです。

しかし、あなたの要件を見て、私は個人的には、次の解決のために行くだろう:

  1. がロックにタイマーを接続し
  2. 間隔30秒でタイマーを作成しますqAppにイベントフィルタをインストールします。スクリーンメソッド
  3. マウスの押下が検出されるたびに、タイマーをリセットするようにイベントフィルターを設定します。

アプリケーションに依存して、KeyPressイベントと多分MouseMoveイベントを探すこともできます。