Qt mousemoveevent + Qt :: LeftButton

时间:2012-05-28 03:08:12

标签: qt mouseevent qgraphicsscene

快速提问,为什么:

void roiwindow::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ 
    QGraphicsScene::mouseMoveEvent(event);
    qDebug() << event->button();
}
当我在图形界中移动光标的同时按住鼠标左键时,

返回0而不是1。反正有没有让它返回1,所以我可以告诉用户何时在图形界面上拖动鼠标。感谢。

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:7)

您可以通过查看buttons属性

来了解是否按下了左键
if ( e->buttons() & Qt::LeftButton ) 
{
  // left button is held down while moving
}

希望有所帮助!

答案 2 :(得分:1)

mouse move events的返回值始终为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);