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