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

Oth*_*oun 6 c++ qt qmouseevent

MouseReleaseEvent(QMouseEvent *e),有没有办法知道哪个按钮是在不使用新变量的情况下发布的?我的意思是像MousePressEvent(QMouseEvent *e)在一起e.buttons().我e.buttons()在releaseEvent中尝试过它不起作用(这是合乎逻辑的).

rps*_*sml 10

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
  }
}
Run Code Online (Sandbox Code Playgroud)

一个switch说法也适用.我更喜欢这一系列if -- else if因为它们使得更容易处理偶数修饰符,即,e->modifiers()为了检查alt或控制点击.if的系列很短,不会给程序带来任何负担.

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

  • 上面的代码有效.我在所有鼠标按钮处理中使用它.e的值是刚刚发布的按钮...注意我使用的是button(),而不是按钮()...... (2认同)

The*_*ght 9

发布代码中的问题是: -

if(e->buttons() & Qt::LeftButton)
Run Code Online (Sandbox Code Playgroud)

正如Qt文档所述的发布事件: -

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

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

但是,button()函数文档说明: -

返回导致事件的按钮.

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