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