Qt如何检查按下哪个鼠标按钮
我在尝试确定事件函数中按下哪个鼠标按钮时遇到PySide问题。我特别需要它来忽略鼠标移动事件,因为它在左右两个鼠标按钮上都做了工作。Qt如何检查按下哪个鼠标按钮
如果按下场景上的右键,我想忽略鼠标移动事件。任何帮助?
鼠标事件的所有有两个方法:(button
和buttons
),以确定哪一个按钮被按下。但仅针对move
事件,文档中提到:
请注意,对于鼠标移动事件,返回值总是为Qt :: NoButton。
为mouseMoveEvent
你应该使用buttons
方法。
void mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() == Qt::RightButton)
qDebug() << "Only right button";
}
为了不理你需要做的这项工作当然eventFilter
移动事件。
你可以检查,通过Qt::RightButton
按下哪个鼠标按钮。对不起,C++代码,但我希望,你会明白的想法反正:
void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
}
}
为您的投入投票,但我已经尝试过这一点,并且它在鼠标按下和鼠标释放的情况下工作,但它在MOUSE MOVE事件中不起作用。 – Alex
这对我不起作用。无论我做什么,该小部件都会收到'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; (“按下”必须是类的成员)
希望它能帮助,让我知道
+1,但这不是我所需要的。我不会为此提出布尔值,当用户使用鼠标笨拙的时候风险太大......已经注意到Qt并不是鼠标事件处理的最佳选择。我确信有内置的方法来达到这个目的。 – Alex
这看起来似乎不能正常工作,如果读取的语句是“if(event-> buttons()== Qt :: LeftButton)”,而不是'button()', 。 –
QApplication::mouseButtons()
将返回mouseButton
, 的状态,那么您可以在KeyPressEvent
中获得鼠标的状态。
这就是我需要的。非常感谢。如果您可以通过鼠标过滤来帮助我,我会为eventFilter打开一个新问题。 – Alex
@Alex欢迎您,我会尽快看到关于'eventFilter'的问题,但我只能为您提供C++代码。 – fasked
发表在这里:http://*.com/questions/16772227/qt-mouse-event-propagation-with-scene-items – Alex