Qt WheelEvent,如何获取鼠标滚轮是否按下?

3

我正在开发一个Qt应用程序,我知道可以使用wheelEvent获取鼠标滚轮的状态,但是我不知道如何判断滚轮是否按下。谢谢!


轮子按下应该是第三个按钮按下... - Leonardo Bernardini
哦,好的,我以为这是由WheelEvent处理的,谢谢。 - Othman Benchekroun
2个回答

3

滚轮事件设置正在按下的按钮。它还设置了按下的键盘修饰键(例如SHIFTCRTL)。

void MyWidget::wheelEvent ( QWheelEvent * event )
{
  if(event->buttons() & Qt::MiddleButton != 0)
  {
    //the mid button is being pressed. handle.
  }
}

这里是可能的按钮列表。它们被设置为标志,即Qt::LeftButton | Qt::RightButton

编辑:

默认情况下,滚轮与中间按钮相关联。滚轮可以在没有关联按钮的情况下移动。例如,在Chrome浏览器上移动滚轮会滚动页面。按下滚轮将改变屏幕上的光标以及滚轮的行为(试一下)。

如果你有一个带有滚轮和中间按钮的奇怪鼠标:

  • 按下中间按钮将生成一个具有Qt::MiddleButtonMouseEvent
  • 按下滚轮按钮将生成一个具有Qt::MiddleButtonWheelEvent

是的,我看到它的值是4,但是为什么要将其用作布尔值?它总是返回true,你的答案是有效的,但如果像这样:if(event->button == Qt::MiddleButton),那就更合理了。 - Othman Benchekroun
我就是不明白event->buttons()返回按钮状态和Qt::MiddleButton等于4如何能返回中间按钮是否按下的布尔值。 - Othman Benchekroun
Qt::MiddleButton 的值会改变吗? - Othman Benchekroun
嗯,这里不起作用。我确实收到了QWheelEvent(当我滚动时,在终端中输出一些内容),但是点击不起作用(至少在Qt中出现了某些问题)。 - rbaleksandar
没关系。我一开始把它当成了一个轮子,但实际上它是一个鼠标按下事件。捂脸 - rbaleksandar
显示剩余8条评论

0

查看QMouseEvent的文档。捕获该事件并注意第三个鼠标按钮。

如果您对事件不感兴趣,但对按钮状态感兴趣,您也可能会对QGuiApplication::mouseButtons()感兴趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接