8

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

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

4

4 回答 4

20

所有鼠标事件都有两种方法(buttonbuttons)来确定按下了哪些按钮。但仅对于move事件,文档说:

请注意,鼠标移动事件的返回值始终是 Qt::NoButton。

因为mouseMoveEvent你应该使用buttons方法。

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

为了忽略移动事件,您eventFilter当然需要完成这项工作。

于 2013-05-27T04:41:09.527 回答
11

QApplication::mouseButtons()将返回 的状态mouseButton,因此,您可以在 中获取鼠标的状态KeyPressEvent

于 2013-05-27T05:46:12.447 回答
2

您可以检查,通过 . 按下了哪个鼠标按钮Qt::RightButton。对不起 c++ 代码,但我希望你能理解这个想法:

void mousePressEvent(QMouseEvent *event)
{ 
    if (event->button()==Qt::RightButton){
        qDebug() << "right button is pressed
    }
}
于 2013-05-26T13:38:26.870 回答
2

您可以使用布尔值:

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 上,您必须设置pressed=false; (“pressed”必须是该类的成员)

希望有帮助,告诉我

于 2013-05-26T14:59:59.427 回答