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答案中的解释.
发布代码中的问题是: -
if(e->buttons() & Qt::LeftButton)
Run Code Online (Sandbox Code Playgroud)
正如Qt文档所述的发布事件: -
...对于鼠标释放事件,这将排除导致事件的按钮.
buttons()函数将返回按钮的当前状态,因此,由于这是一个释放事件,代码将返回false,因为它不再被按下.
但是,button()函数的文档说明: -
返回导致事件的按钮.
所以你可以在这里使用button()函数.