在尝试确定在事件函数中按下了哪个鼠标按钮时,我在 PySide 中遇到了问题。我特别需要它来忽略鼠标移动事件,因为它在左右鼠标按钮上都起作用。
如果按下场景上的右键,我想忽略鼠标移动事件。有什么帮助吗?
所有鼠标事件都有两种方法(button
和buttons
)来确定按下了哪些按钮。但仅对于move
事件,文档说:
请注意,鼠标移动事件的返回值始终是 Qt::NoButton。
因为mouseMoveEvent
你应该使用buttons
方法。
void mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() == Qt::RightButton)
qDebug() << "Only right button";
}
为了忽略移动事件,您eventFilter
当然需要完成这项工作。
QApplication::mouseButtons()
将返回 的状态mouseButton
,因此,您可以在 中获取鼠标的状态KeyPressEvent
。
您可以检查,通过 . 按下了哪个鼠标按钮Qt::RightButton
。对不起 c++ 代码,但我希望你能理解这个想法:
void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
}
}
您可以使用布尔值:
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”必须是该类的成员)
希望有帮助,告诉我