6

快速提问,为什么会这样:

void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ 
    QGraphicsScene::mouseMoveEvent(event);
    qDebug() << event->button();
}

当我在图形场景中移动光标时按住鼠标左键时返回 0 而不是 1。无论如何要让它返回 1,这样我就可以知道用户何时在图形场景中拖动鼠标。谢谢。

4

3 回答 3

13

尽管 Spyke 的回答是正确的,但您可以使用buttons()( docs )。 返回导致button()事件的鼠标按钮,这就是它返回的原因;但返回事件触发时按住的按钮,这就是你所追求的。Qt::NoButtonbuttons()

于 2012-05-28T07:15:22.117 回答
10

buttons通过查看属性可以知道是否按下了左键:

if ( e->buttons() & Qt::LeftButton ) 
{
  // left button is held down while moving
}

希望有帮助!

于 2012-05-28T07:29:58.287 回答
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);
于 2012-05-28T04:25:19.533 回答