问:如何检查按下了哪个鼠标按钮

时间:2013-05-26 13:09:02

标签: c++ qt pyqt pyside

在尝试确定事件功能中按下了哪个鼠标按钮时,PySide出现问题。我特别需要它来忽略鼠标移动事件,因为它在左右两个鼠标按钮上都有效。

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

4 个答案:

答案 0 :(得分:15)

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

  

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

mouseMoveEvent您应该使用buttons方法。

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

为了忽略移动事件,您需要在eventFilter中完成此工作。

答案 1 :(得分:8)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分: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; (“按下”必须是班级成员)

希望它有所帮助,让我知道