c++ - QGraphicsScene 中的鼠标移动跟踪

标签 c++ qt qt5 qgraphicsview qgraphicsscene

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

最佳答案

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

Returns the mouse cursor position in item coordinates.

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

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

关于c++ - QGraphicsScene 中的鼠标移动跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55669409/

相关文章:

java - java 或 C++ 中的堆管理器如何跟踪线程或进程使用的所有内存位置?

c++ - Qt HBoxLayout - 将小部件转换到新行

代码编辑期间 Qt Creator 100% CPU

c++ - 计算Qt5中写入QDataStream的字节数

C++远程方法调用

c++ - Visual C++ 2008 错误?

c++ - 从原点找到最近的位置

C++ Qt 从 QNetworkRequest 获取 HTTP header

c++ - 使 Qt5 应用程序的第二个实例将命令行参数传递给第一个实例

c++ - Qt Quick的parent,和parent的id不一样