Qt鼠标移动事件 + Qt::LeftButton

6
快速提问,为什么会出现:
void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ 
    QGraphicsScene::mouseMoveEvent(event);
    qDebug() << event->button();
}

当我按住鼠标左键并在图形场景中移动光标时,希望返回0而不是1。有没有办法让它返回1,这样我就可以知道用户是否正在拖动鼠标穿过图形场景。谢谢。

3个回答

14

尽管Spyke的答案是正确的,但你可以只使用buttons() (文档)。 button()返回导致事件发生的鼠标按钮,这就是为什么它返回Qt::NoButton的原因;但是buttons()返回在触发事件时按下的按钮,这正是你需要的。


10
你可以通过查看buttons属性来确定左键是否被按下:
if ( e->buttons() & Qt::LeftButton ) 
{
  // left button is held down while moving
}

希望这有所帮助!


啊,我先看了cbambers的回复,但我很感谢这篇帖子。 - JustinBlaber

1

对于鼠标移动事件,返回值始终为Qt :: NoButton。您可以使用事件过滤器来解决此问题。

试试这个

bool MainWindow::eventFilter(QObject *object, QEvent *e)
{

 if (e->type() == QEvent::MouseButtonPress && QApplication::mouseButtons()==Qt::LeftButton)
 {
  leftbuttonpressedflag=true;
 }

  if (e->type() == QEvent::MouseMove)
 {
   QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(e);
   if(leftbuttonpressedflag && mouseEvent->pos()==Inside_Graphics_Scene)
   qDebug("MouseDrag On GraphicsScene");
 }

 return false;

}

而且不要忘记在主窗口中安装此事件过滤器。
qApplicationobject->installEventFilter(this);

感谢您的回复。虽然这不是最简单的解决方案,但我仍然会研究一下事件过滤器的工作原理,以防我遇到其他潜在的问题需要用到它。再次感谢。 - JustinBlaber

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