Qt如何检查按下哪个鼠标按钮

问题描述:

我在尝试确定事件函数中按下哪个鼠标按钮时遇到PySide问题。我特别需要它来忽略鼠标移动事件,因为它在左右两个鼠标按钮上都做了工作。Qt如何检查按下哪个鼠标按钮

如果按下场景上的右键,我想忽略鼠标移动事件。任何帮助?

鼠标事件的所有有两个方法:(buttonbuttons),以确定哪一个按钮被按下。但仅针对move事件,文档中提到:

请注意,对于鼠标移动事件,返回值总是为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://*.com/questions/16772227/qt-mouse-event-propagation-with-scene-items – Alex

你可以检查,通过Qt::RightButton按下哪个鼠标按钮。对不起,C++代码,但我希望,你会明白的想法反正:

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

为您的投入投票,但我已经尝试过这一点,并且它在鼠标按下和鼠标释放的情况下工作,但它在MOUSE MOVE事件中不起作用。 – Alex

+0

这对我不起作用。无论我做什么,该小部件都会收到'QContextMenuEvent'而不是'QMouseEvent',即使我没有菜单,并尝试使用'setContextMenuPolicy'也不会改变事物。 –

你可以使用一个布尔值:

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你必须set pressed = false; (“按下”必须是类的成员)

希望它能帮助,让我知道

+0

+1,但这不是我所需要的。我不会为此提出布尔值,当用户使用鼠标笨拙的时候风险太大......已经注意到Qt并不是鼠标事件处理的最佳选择。我确信有内置的方法来达到这个目的。 – Alex

+0

这看起来似乎不能正常工作,如果读取的语句是“if(event-> buttons()== Qt :: LeftButton)”,而不是'button()', 。 –

QApplication::mouseButtons()将返回mouseButton, 的状态,那么您可以在KeyPressEvent中获得鼠标的状态。