2016-03-19 10 views
0

ホイールのクリックイベントとマウスのプレスイベントを区別する方法が不思議です。私はpysideでこれらの2つのイベントのための異なる処理をしたいので。現在、ホイールボタンをクリックするたびに、イベントはmousepresseventによってキャッチされます。誰でも説明できますか?ホイールボタンのクリックイベントとマウスのプレスイベントを区別するにはどうすればよいですか?

編集:wheelEventが単独でスクロールするためである間、私はその名前から qglwidgetクラス

+0

ホイールはおそらく中ボタンのクリックと解釈されますか? –

+0

@FrankOsterfeldホイールは、中ボタンのクリックではなくスクロールとして解釈されます。 wheelEventの中でホイールの中ボタンをクリックするイベントハンドリング関数を書くと、mouseは中ボタンのクリックイベントを受け取ります。 – Johnnylin

+0

@Johnnylinそれがまさにそれが動作する方法です。マウスホイールはスクロール**と**クリックの両方に使用できます。現代のマウスには3つのクリックボタンがあり、多くは5つあります。 [QMouseEvent](http://doc.qt.io/qt-4.8/qmouseevent.html)の 'button()'や 'buttons()'メソッドを調べることで、それらを区別することができます。 – ekhumoro

答えて

2

のサブクラスでこれを実装したい、mousePressEventは、マウスのクリックを担当しています。 wheelEventはホイールボタンのクリックを捕捉しません。これは、QtのAPIがマウスイベント処理に関してどのように設計されているかです。

どのマウスボタンを押しているか(右、左または左)を切り分けるには、buttonproperty of QMouseEventを使用します。

これは、コードが

void GLWidget::mousePressEvent(QMouseEvent *event) // redefine the mouse event 
{ 
switch(event->button()) { 
case Qt::LeftButton: 
    // do stuff for left button pressed 
    break; 
case Qt::MiddleButton: 
    // do stuff for wheel button pressed 
    break; 
// ... 
} 
} 

ので、pysideのために、あなただけのmousePressEventeventbuttonプロパティを比較する必要があります(私はpysideにそれを翻訳することは容易であると想像)、C++を使用して次のようになります方法ですQt.LeftButtonQt.RightButtonまたはQt.MidButtonであるかどうかを確認してください。希望が役立ちます。

+0

ありがとうございます。それはまさに私が欲しいものです。そして、あなたは何がイベントフィルターの使用であるか説明するのを助けることができますか?イベントフィルタを使用してそれらを区別する必要があると思ったからです。 – Johnnylin

+0

イベントフィルタの使用例は、複数の 'QObject'を扱うときにイベントを制御できるようにすることです。親オブジェクトに子が含まれていて、親の子イベントを処理したいと仮定します。この場合、イベントフィルタ 'childObject-> installEventFilter(parent)'を設定し、 'parent :: eventFilter()'で 'child'のイベントを' parent'の間に処理することができます。詳細が必要な場合は、[この具体的な例題](http://www.informit.com/articles/article.aspx?p=1405544&seqNum=2)を参照してください。 – vicrucann