2013-05-26 13 views
6

イベント機能でどのマウスボタンが押されたのかを判断しようとしているときにPySideに問題があります。特に、マウスの移動イベントを無視するためには、左右のマウスボタンの両方で作業しているので、この機能が必要です。Qtどのマウスボタンが押されたかチェックする方法

シーンの右ボタンを押すと、マウス移動イベントを無視したいです。どんな助け?

答えて

14

すべて知っています。しかし、たったmoveイベントについては、

戻り値は、マウス移動イベントの場合、常にQt :: NoButtonです。

mouseMoveEventbuttonsの方法を使用してください。

void mouseMoveEvent(QMouseEvent *e) 
{ 
    if(e->buttons() == Qt::RightButton) 
     qDebug() << "Only right button"; 
} 

移動イベントを無視するには、もちろんこの作業をeventFilterで行う必要があります。

+0

それは私が必要なものです。どうもありがとうございます。私はあなたがマウスのフィルタリングを手伝ってくれればeventFilterの新しい質問を開くだろう。 – Alex

+0

@Alex大歓迎ですが、できるだけ早く 'eventFilter'に関する質問が表示されますが、C++コードのみを提供することができます。 – fasked

+0

ここに投稿:http://stackoverflow.com/questions/16772227/qt-mouse-event-propagation-with-scene-items – Alex

1

Qt::RightButtonでどのマウスボタンを押しているか確認できます。とにかく申し訳ありませんが、C++のコードのために、しかし、私は願って、あなたは理解するであろうアイデア:

void mousePressEvent(QMouseEvent *event) 
{ 
if (event->button()==Qt::RightButton){ 
    qDebug() << "right button is pressed 
    pressed=true; //<----- 
} 
} 

とmouseMoveEvent

void GLWidget::mouseMoveEvent(QMouseEvent *event) 
{ 

float dx = event->x() - lastPos.x();  // where lastpos is a QPoint member 
float dy = event->y() - lastPos.y(); 

if (dx<0) dx=-dx; 
if (dy<0) dy=-dy; 

if (event->buttons() & Qt::LeftButton) { //if you have MOVEd 

    ...do something 

} 

if (event->buttons() & Qt::RightButton) { 

    if (pressed==true) return; 
    else{ 
    ...do 
    } 
} 
} 

上のあなたが持っているmousereleaseの場合:あなたはブール値を使用することができ

void mousePressEvent(QMouseEvent *event) 
{ 
    if (event->button()==Qt::RightButton){ 
     qDebug() << "right button is pressed 
    } 
} 
+1

あなたのエンゲージメントに投票してください。しかし、私はすでにこれを試しましたが、マウスを押してマウスを離しても動作しますが、MOUSE MOVEイベントでは機能しません。 – Alex

+0

これは私のためには機能しません。メニューがなくても、ウィジェットは 'QControlMenuPolicy'を使って何かを変更していなくても、私が何をしていても' QMouseEvent'の代わりに 'QContextMenuEvent'を受け取ります。 –

2

セットされた= falseを設定します。

はそれがお役に立てば幸いです(「押された」クラスのメンバである必要があります)、私が押されたボタンのどれかを決定するために2つのメソッド( buttonbuttons)を持っているマウスイベントの

+0

+1を試してみるが、それは私が必要とするものではない。私はそのことについてブール値をつけません。マウスでは不器用すぎると危険です... Qtはマウスイベント処理では最高のものではないことに気がつきました。私は、その目的のために組み込みのメソッドがあることを確信しています。 – Alex

+0

これは正しく動作していないようですが、文章が 'button()'ではなく 'if(event-> buttons()== Qt :: LeftButton)'のようなものであれば、 。 –

6

QApplication::mouseButtons()mouseButton, のステータスを返すので、KeyPressEventにマウスのステータスを取得できます。

関連する問題