2009-08-21 70 views
7

Qtを使用して、 MouseEventを使用しないで、いつでもマウスの現在の状態を検出する方法を知りたいと思います。MouseEventを使用しないでQtのマウス状態を検出する方法

QCursor :: pos()を使用すると、その位置を取得できますが、ボタンの現在の状態を判断する方法はありますか?

基本的には、タイマーがオフになったときのマウスの状態を確認するため、特定のMouseEventに関連しないため、照会するMouseEventはありません。 MouseEventを持たずに、マウスの状態、特にボタンの状態を照会する方法を知る必要があります。

ああ、私はQt 3を使用しています。そのような関数がQt 4に追加されていてもQt 3にない場合は、それほど助けになりません(ただし、 )。

答えて

1

MouseEventを使用しないことは難しいですか?またはMouseEventsを間接的に使用できますか?

すべてのボタンに対してブール変数を作成し、それをマウスの押した/離したイベントで更新すると、タイマーがオフになったときに関連するブール値の値を見ることができます。

+0

イベントに関連付けることはできません。つまり、MouseEventを返すことで現在のマウス状態を取得する関数があれば、それは問題ありませんが、イベントを処理することはできません。私はイベントの有無を心配することなく、マウスの現在の状態を簡単に問い合わせることができなければなりません。 –

+0

イベントにアクセスできないのはなぜですか?あなたはパフォーマンスについて心配ですか?どのようにコードがイベントのためにディスパッチせずにGUIで実行されていますか? – Bill

+0

これは間違いなくバグのない複雑なシステムであり、私はいかなるイベントも見逃さないことを保証することはできません。だから、マウスが正しい状態になっているときにタイマー_should_だけが消えるように設定されている間に、イベントがクラックを通らないことを保証するために、マウスの状態をチェックする必要があります。 –

14

Qt::MouseButtons QApplication::mouseButtons() [static]

は、マウスのボタンの現在の状態を返します。現在の 状態は、イベントキューがマウスの状態(QEvent::MousePressと イベント)を自発的に変更するイベント を空にするのに同期して更新されます。

が最後上記のイベントの一つで報告されているように、これは呼び出しの時点で theinputデバイスに開催された実際のボタンではなくマウスボタンを反映していない可能性が注目されるべきです。マウスボタンがない場合は が保持されます。Qt::NoButtonが返されます。

編集:うーん、私はちょうどQt3.3について尋ねました。この回答はQt4に当てはまりますが、恐れ入ります。

+0

私が質問したように、 qt3にない場合でもqt4でそれを行います。それ以外のものがあれば、私は問題のアプリケーションの将来のバージョンでそれを使うことができます(そして、そのようなことについてもっと知ることは常に良いことです)。しかし、現在のバージョンはqt3に入っていますので、qt3でそれを行う方法がない限り、私はその時点で不運です。しかし、それがqt4ではなくqt3であれば、それはtrolltechがqtを改善し続け、それをより良いツールキットにしていることを示すことになります。 –

関連する問題