按下鼠标时 Qt mouseMoveEvent 不触发

Qt mouseMoveEvent not firing when mouse pressed

我有一个自定义的 QGraphicsScene,其中有一个 mouseMoveEvent(QGraphicsSceneMouseEvent *event);

当我用鼠标悬停在场景上时,mouseMoveEvent 会被正确触发。
但是当我在鼠标悬停时按下鼠标按钮时,它不会再被触发。 这就是我在 window:

中设置整个场景的方式
scene = new NodeScene(this);  -> My Custom QGraphicsScene class
scene->setSceneRect(QRectF(0, 0, 5000, 5000));

QHBoxLayout *layout = new QHBoxLayout;
view = new QGraphicsView(scene);
layout->addWidget(view);
view->setDragMode(QGraphicsView::RubberBandDrag);
view->setMouseTracking(true);

QWidget *widget = new QWidget;
widget->setLayout(layout);
setCentralWidget(widget);
scene->setCentralWidget(widget);

这是我处理鼠标事件的代码(用于 Maya 执行):

void NodeScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Move");
    QGraphicsScene::mouseMoveEvent(event);
}

void NodeScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Press");
    QGraphicsScene::mousePressEvent(event);
}

void NodeScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Release");
    QGraphicsScene::mouseReleaseEvent(event);
}

知道如何在按下鼠标按钮时获取 mouseMoveEvents 吗?

听起来您没有实现所有鼠标事件,只实现了 mouseMoveEvent。

覆盖鼠标事件时,您应该处理所有这些事件(移动、按下和释放事件)。

然后您可以在按下事件中设置一个布尔值,以了解在进入 mouseMove 事件时鼠标按钮是否被按住。

通过将我的代码与其他示例进行比较发现了问题,这是由于 setDragMode(QGraphicsView::RubberBandDrag); 线。默认情况下,代码应在 QGraphicsView::NoDrag 上,并且 RubberBandDrag 仅在按下时启用。