QGraphicsScene中的mouseMove跟踪

问题描述 投票:1回答:1

我想在主窗口中跟踪鼠标。我在QGraphicsView中启用了moustracking,这里是GraphicsView子类的构造函数,其余的是默认行为。

GraphicsView::GraphicsView(QWidget* parent): QGraphicsView(parent)
{

  setMouseTracking(true);

  setDragMode(RubberBandDrag);
  setRenderHints(QPainter::Antialiasing|  QPainter::TextAntialiasing);
  setMinimumSize(600, 400);

}

这是我的GraphicsScene MouseMove方法:

void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  if (myMode == InsertLine && line != nullptr) {
      QLineF newLine(line->line().p1(), mouseEvent->scenePos());
      line->setLine(newLine);
  } else if (myMode == Select) {
      QGraphicsScene::mouseMoveEvent(mouseEvent);
  }
  QPointF point = mouseEvent->pos();
  //point = this->mapToScene(point);
  qDebug() << point.x() << " " << point.y() << " ";
  mouseMoved(point);
  QGraphicsScene::mouseMoveEvent(mouseEvent);
}

对于x和y位置,我得零和零。我究竟做错了什么 ?

c++ qt qt5 qgraphicsview qgraphicsscene
1个回答
1
投票

如果您查看QGraphicsSceneMouseEvent的pos()方法的文档:

返回项目坐标中的鼠标光标位置。

也就是说,那些坐标是相对于QGraphicsItem的,但是在这种情况下没有坐标,因此它没有意义(只有当mouseMoveEvent属于QGraphicsItem时才会有它)。在这种情况下,您必须使用scenePos()方法

void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  // ...
  QPointF point = mouseEvent->scenePos();
  qDebug() << point.x() << " " << point.y() << " ";
  // ...
  QGraphicsScene::mouseMoveEvent(mouseEvent);
}
© www.soinside.com 2019 - 2024. All rights reserved.