8

MouseReleaseEvent(QMouseEvent *e)中,有没有一种方法可以在不使用新变量的情况下知道释放了哪个按钮?我的意思是在MousePressEvent(QMouseEvent *e)with 中e.buttons()。我e.buttons()在 releaseEvent 中尝试过它不起作用(这是合乎逻辑的)。

4

2 回答 2

11

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声明也有效。我更喜欢 of 的系列,if -- else if因为它们使处理事件修饰符变得更容易,即,e->modifiers()为了检查 alt 或控制点击。if 的系列足够短,不会对程序造成任何负担。

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

于 2014-08-21T12:30:26.807 回答
9

发布代码中的问题是: -

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

正如Qt 文档中针对发布事件所述: -

... 对于鼠标释放事件,这不包括导致事件的按钮。

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

但是,button() 函数的文档指出:-

返回导致事件的按钮。

所以你可以在这里使用button()函数。

于 2014-08-21T12:36:37.860 回答