0

我有一个简单的 QGraphicsWidget,MyGraphicsWidget。这是我的 mouseMoveEvent(),它似乎工作正常:

void MyGraphicsWidget::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
{
    QPointF p = event->scenePos() - m_StartPos;
    if(p.manhattanLength() < 20)
        return;
    //omitted drawing a rounded rect on the drag
    QDrag *drag = new QDrag(event->widget());
    drag->start(Qt::MoveAction);
}

场景的 dropEvent() 只是将此小部件移动到其新位置,并且我没有场景本身的按下/移动事件,因此这些应该正确传递给其中的小部件。

但是,一旦拖动完成,下一次鼠标按下将在此小部件上。因此,如果我尝试单击并拖动另一个小部件,尽管我的光标不在此小部件上,但我会意外地拖动这个小部件。我打印了 event->pos() 和 event->scenePos(),两者都报告说光标在它看起来的位置(根本不在小部件上)。如果我在尝试单击并拖动之前单击一次,一切正常。是否有可能我需要在 mouseReleaseEvent() 或我的 mouseMoveEvent() 中实现?

谢谢。

4

1 回答 1

0

它现在正在工作。我很确定这是问题所在:MyGraphicsWidget 上面还有另一个自定义 GraphicsWidget,在它的 mousePressEvent 中,我正在调用 QGraphicsWidget::mousePressEvent(event); 在活动开始时。事件的其余部分从未被触发,这一切都搞砸了。我将该行移到方法的末尾,现在一切似乎都很好。

于 2012-12-14T21:15:03.773 回答