如何在Qt中获取MouseReleaseEvent中的已释放按钮

时间:2014-08-21 12:26:43

标签: c++ qt qmouseevent

MouseReleaseEvent(QMouseEvent *e)中,有没有办法知道在不使用新变量的情况下释放了哪个按钮?我的意思是MousePressEvent(QMouseEvent *e)e.buttons()之类的内容。 我在releaseEvent中尝试了e.buttons()它没有工作(这是合乎逻辑的)。

2 个答案:

答案 0 :(得分:9)

e已经是一个变量。只需使用:

void mouseReleaseEvent(QMouseEvent *e)
{
  if (e->button() == Qt::LeftButton)    // Left button...
  {
    // Do something related to the left button
  }
  else if (e->button() == Qt::RightButton)   // Right button...
  {
    // Do something related to the right button
  }
  else if (e->button() == Qt::MidButton)   // Middle button...
  {
    // Do something related to the middle button
  }
}

switch声明也有效。我更喜欢if -- else if系列,因为它们可以更轻松地处理偶数修饰符,即e->modifiers()以检查alt或控制点击。 if的系列很短,不会给程序带来任何负担。

编辑:请注意,您应该使用button()函数,而不是其复数buttons()版本。请参阅@ Merlin069答案中的解释。

答案 1 :(得分:9)

发布代码中的问题是: -

if(e->buttons() & Qt::LeftButton)

作为发布事件的Qt documentation状态: -

  

...对于鼠标释放事件,这会排除导致该事件的按钮。

buttons()函数将返回按钮的当前状态,因此这是一个释放事件,代码将返回false,因为它不再被按下。

然而,documentation for the button() function州: -

  

返回导致该事件的按钮。

所以你可以在这里使用button()功能。