web-dev-qa-db-ja.com

Qtどのマウスボタンが押されているかを確認する方法

イベント機能でどのマウスボタンが押されているかを判断しようとすると、PySideに問題が発生します。特に、マウスの移動イベントを無視する場合に必要です。これは、マウスの左右両方のボタンで機能するためです。

シーンの右ボタンが押された場合のマウス移動イベントを無視したい。何か助けはありますか?

7
Alex

すべてのマウスイベントには、どちらのボタンが押されたかを判別するための2つのメソッド(buttonbuttons)があります。ただし、moveイベントの場合のみ、ドキュメントには次のように記載されています。

マウス移動イベントの場合、戻り値は常にQt :: NoButtonであることに注意してください。

mouseMoveEventの場合は、buttonsメソッドを使用する必要があります。

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

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

15
fasked

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

8
ken

ブール値を使用できます:

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   
    } 
}
}

マウスリリースでは、pressed = falseを設定する必要があります。 (「押された」はクラスのメンバーである必要があります)

お役に立てば幸いです。お知らせください

2
Nicola

Qt::RightButtonでどのマウスボタンが押されているかを確認できます。 c ++コードで申し訳ありませんが、とにかくアイデアを理解していただければ幸いです。

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