2012-12-12 4 views
0

나는 간단한 QGraphicsWidget, MyGraphicsWidget을 가지고있다. 여기에 잘 작동하는 것 같다 내 mouseMoveEvent()이다 : 그래서, 장면의 dropEvent()가 바로 새 위치로이 위젯을 이동하고, 나는 장면 자체에 대한 기자/move 이벤트가없는 내 QGraphicsWidget이 QDrag 후에는 안되는 이벤트를 수신하는 이유는 무엇입니까?

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

그 (것)들은 위젯에 정확하게 전달되어야합니다.

그러나 드래그가 완료되면 다음 마우스를이 위젯에 놓습니다. 따라서 다른 위젯을 클릭하고 드래그하려고하면 커서가이 위젯에 있지 않다는 사실에도 불구하고 우연히 드래그하여 멈추게됩니다. 나는 event-> pos()와 event-> scenePos()를 출력했고 커서는 그것이 보이는 곳 (위젯에 전혀 없다)으로보고했다. 클릭하고 끌기 전에 한 번 클릭하면 모든 것이 정상적으로 작동합니다. mouseReleaseEvent() 또는 내 mouseMoveEvent() 내에서 구현해야 할 무언가가 있습니까?

감사합니다.

+0

'drag-> exec()'가 아니어야합니까? 문서에서'QDrag :: start()'메서드를 볼 수 없습니다. – cmannett85

+0

버전 차이가있을 수 있습니다. 우리는 완전히 최신이 아닙니다. – Brianide

+0

API가 크게 변경된 경우 귀하의 질문에 어떤 버전이 포함되어 있는지 설명해야합니다. – cmannett85

답변

0

이제 작동 중입니다. 나는 이것이 꽤 문제라고 확신한다. MyGraphicsWidget은 다른 사용자 정의 GraphicsWidget을 맨 위에 놓았고, mousePressEvent에는 QGraphicsWidget :: mousePressEvent (event);를 호출했다. 이벤트가 시작될 때 이벤트의 나머지 부분은 결코 멈추지 않았습니다. 나는 그 행을 메서드의 끝으로 옮겼고 모든 것이 이제는 괜찮아 보입니다.

관련 문제