ホイールのクリックイベントとマウスのプレスイベントを区別する方法が不思議です。私はpysideでこれらの2つのイベントのための異なる処理をしたいので。現在、ホイールボタンをクリックするたびに、イベントはmousepresseventによってキャッチされます。誰でも説明できますか?ホイールボタンのクリックイベントとマウスのプレスイベントを区別するにはどうすればよいですか?
編集:wheelEvent
が単独でスクロールするためである間、私はその名前から qglwidgetクラス
ホイールのクリックイベントとマウスのプレスイベントを区別する方法が不思議です。私はpysideでこれらの2つのイベントのための異なる処理をしたいので。現在、ホイールボタンをクリックするたびに、イベントはmousepresseventによってキャッチされます。誰でも説明できますか?ホイールボタンのクリックイベントとマウスのプレスイベントを区別するにはどうすればよいですか?
編集:wheelEvent
が単独でスクロールするためである間、私はその名前から qglwidgetクラス
のサブクラスでこれを実装したい、mousePressEvent
は、マウスのクリックを担当しています。 wheelEvent
はホイールボタンのクリックを捕捉しません。これは、QtのAPIがマウスイベント処理に関してどのように設計されているかです。
どのマウスボタンを押しているか(右、左または左)を切り分けるには、button
property 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のために、あなただけのmousePressEvent
にevent
のbutton
プロパティを比較する必要があります(私はpyside
にそれを翻訳することは容易であると想像)、C++を使用して次のようになります方法ですQt.LeftButton
、Qt.RightButton
またはQt.MidButton
であるかどうかを確認してください。希望が役立ちます。
ありがとうございます。それはまさに私が欲しいものです。そして、あなたは何がイベントフィルターの使用であるか説明するのを助けることができますか?イベントフィルタを使用してそれらを区別する必要があると思ったからです。 – Johnnylin
イベントフィルタの使用例は、複数の 'QObject'を扱うときにイベントを制御できるようにすることです。親オブジェクトに子が含まれていて、親の子イベントを処理したいと仮定します。この場合、イベントフィルタ 'childObject-> installEventFilter(parent)'を設定し、 'parent :: eventFilter()'で 'child'のイベントを' parent'の間に処理することができます。詳細が必要な場合は、[この具体的な例題](http://www.informit.com/articles/article.aspx?p=1405544&seqNum=2)を参照してください。 – vicrucann
ホイールはおそらく中ボタンのクリックと解釈されますか? –
@FrankOsterfeldホイールは、中ボタンのクリックではなくスクロールとして解釈されます。 wheelEventの中でホイールの中ボタンをクリックするイベントハンドリング関数を書くと、mouseは中ボタンのクリックイベントを受け取ります。 – Johnnylin
@Johnnylinそれがまさにそれが動作する方法です。マウスホイールはスクロール**と**クリックの両方に使用できます。現代のマウスには3つのクリックボタンがあり、多くは5つあります。 [QMouseEvent](http://doc.qt.io/qt-4.8/qmouseevent.html)の 'button()'や 'buttons()'メソッドを調べることで、それらを区別することができます。 – ekhumoro