Qt mouseMoveEvent不触发当鼠标按下

Qt mouseMoveEvent not firing when mouse pressed

本文关键字:鼠标 mouseMoveEvent Qt      更新时间:2023-10-16

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

当我用鼠标悬停在场景上时,mouseMoveEvent被正确地触发。
然而,当我悬停与一个鼠标按钮按下,然后它不会被解雇了。下面是我在主窗口设置整个场景的方法:

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);

这里是代码,我做处理鼠标事件(这是玛雅执行):

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仅在按下时启用。