2013-05-26 2 views
6

이벤트 기능에서 어떤 마우스 버튼을 눌렀는지 확인하려고 할 때 PySide에 문제가 있습니다. 마우스 이동 이벤트를 무시할 때 특히 필요합니다. 왼쪽 및 오른쪽 마우스 버튼 모두에서 작업을 수행하기 때문입니다.Qt 어떤 마우스 버튼이 눌러 졌는지 확인하는 방법

장면의 오른쪽 버튼을 누르면 마우스 이동 이벤트를 무시하고 싶습니다. 어떤 도움이 필요합니까?

답변

14

모든 알려 주시기 바랍니다. 그러나 이벤트의 경우 설명서에 다음과 같이 표시됩니다.

마우스 이동 이벤트의 경우 항상 반환되는 값은 Qt :: NoButton입니다.

mouseMoveEvent의 경우 buttons 메서드를 사용해야합니다.

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

약혼을 위해 투표하십시오.하지만 이미 시도한 바 있습니다. 마우스가 눌려지고 마우스가 놓아지면 작동하지만 마우스 동작 이벤트에서는 작동하지 않습니다. – Alex

+0

이것은 나를 위해 작동하지 않습니다. 위젯은 내가하는 일과 상관없이'QMouseEvent' 대신에'QContextMenuEvent'를받습니다. 메뉴가 없어도'setContextMenuPolicy'를 사용하면 어떤 것도 바뀌지 않습니다. –

2

set pressed = false;

는 희망이 도움이 ("를 누르면"클래스의 구성원이어야합니다), 나 누를 때 버튼을 결정하는 두 가지 방법 ( buttonbuttons)가 마우스 이벤트의

+0

+1을 시도해보십시오.하지만 필요한 것은 아닙니다. 그 문제에 대해 부울을 두지는 않을 것입니다. 사용자가 마우스로 서투른 경우에는 너무 위험합니다 ... Qt가 마우스 이벤트 처리에서 가장 좋지 않다는 것을 알았습니다. 그 목적을위한 기본 제공 방법이 있다는 것이 확신됩니다. – Alex

+0

이것은 제대로 작동하지 않는 것처럼 보입니다. 문이'button()'대신에'if (event-> buttons() == Qt :: LeftButton)'와 같이 쓰여진다면 마우스 버튼을 쥐는 것 같았습니다. . –

6

QApplication::mouseButtons()mouseButton, 의 상태를 반환하므로 KeyPressEvent에 마우스의 상태를 알 수 있습니다.

관련 문제