在尝试确定事件功能中按下了哪个鼠标按钮时,PySide出现问题。我特别需要它来忽略鼠标移动事件,因为它在左右两个鼠标按钮上都有效。
如果按下场景上的右键,我想忽略鼠标移动事件。有什么帮助吗?
答案 0 :(得分:15)
所有鼠标事件都有两种方法(button
和buttons
)来确定按下哪些按钮。但仅对于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; (“按下”必须是班级成员)
希望它有所帮助,让我知道