我想在我的主窗口中跟踪鼠标。 我在 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/