【问题标题】:mouseMoveTracking in QtGraphicsSceneQGraphicsScene 中的鼠标移动跟踪
【发布时间】:2019-09-04 06:26:34
【问题描述】:

我想在我的主窗口中跟踪鼠标。 我在 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 位置,我得到零和零。我究竟做错了什么 ?

【问题讨论】:

    标签: c++ qt qt5 qgraphicsview qgraphicsscene


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 2022-06-22
      • 2011-07-24
      • 1970-01-01
      • 2021-12-10
      • 2012-10-15
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多