为什么我的QGraphicsWidget会在QDrag之后接收不应该发生的事件?

时间:2012-12-12 20:21:13

标签: qt qgraphicsitem

我有一个简单的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-&gt; pos()和event-&gt; scenePos(),并且都报告了光标在它看来的位置(根本不在小部件上)。如果我在尝试单击并拖动之前单击一次,则一切正常。我需要在mouseReleaseEvent()或mouseMoveEvent()中实现一些东西吗?

感谢。

1 个答案:

答案 0 :(得分:0)

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