mouseMoveTracking в QtGraphicsScene - PullRequest
       86

mouseMoveTracking в QtGraphicsScene

1 голос
/ 13 апреля 2019

Я хочу отслеживать мышь в моем главном окне. Я включил moustracking в QGraphicsView здесь конструктор для подкласса 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 позиции. Что я делаю неправильно ?

1 Ответ

1 голос
/ 14 апреля 2019

Если вы просматриваете документы pos(), метод QGraphicsSceneMouseEvent:

Возвращает положение курсора мыши в координатах элемента.

То есть эти координаты относятся к QGraphicsItem, но в этом случае нет координат и, следовательно, они не имеют смысла (он будет иметь их только в том случае, если mouseMoveEvent будет принадлежать QGraphicsItem). В этом случае вы должны использовать метод scenePos()

void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  // ...
  QPointF point = mouseEvent->scenePos();
  qDebug() << point.x() << " " << point.y() << " ";
  // ...
  QGraphicsScene::mouseMoveEvent(mouseEvent);
}
...