2014-03-28 2 views
0

the docs에 따르면 QGraphicsSceneEvent::widget()은 QWidget을 반환합니다. 위젯이 이 아니며 항상이 QGraphicsView가 될 수 있습니까 (또는 null)?QGraphicsSceneEvent :: widget()은 항상 QGraphicsView입니까?

나는 devs가 방금 그것을 만들지 않았을 것이라는 점을 제외하고는 그렇게 생각하지 않을 것이다. QGraphicsSceneEvent::view().

내가 부탁 해요 이유는 내 서브 클래스 QGraphicsScene에, 나는 QGraphicsScene::mousePressEvent() 무시 것을 내가 이벤트를 발생하는보기 알고 싶다 - 그것은 정적 캐스트 widget()에 안전 경우 미안이를 QGraphicsView에 궁금하거나 경우 다른 위젯이 이벤트를 만들 수 있다고 생각할 수 있습니다.

는 대해 참조

답변

1

QGraphicsSceneEvent::widget()를 반환 QGraphicsView가 아닌 ​​뷰포트 위젯. QGraphicsView를 원할 경우, event->widget()->parent()을 사용해야합니다.

1

문서 페이지는 이벤트의 대상으로 QGraphicsView을 언급 하십시오를 QGraphicsView는 Qt는 마우스, 키보드, 드래그를 받고 이벤트 (QMouseEvent, QKeyEvent, QDragEvent 등) 드롭

, 그것을 을 QGraphicsSceneEvent 하위 클래스의 인스턴스로 변환하고 표시하는 QGraphicsScene 으로 전달합니다. 그 다음 장면은 해당 항목을 에게 전달합니다.

그러나, 당신이 의심하는 경우 QGraphicsSceneEvent::widget() 항상 QGraphicsView를 반환, 또는 당신은 항상 QGraphicsView 당신이 qobject_cast 사용하여 확인 할 수 있습니다해야한다고 릴레이 : 그것이 나오는 것에 따라

QGraphicsView *view = qobject_cast<QGraphicsView *>(event->widget(); 
if (view) { 
    // Handle the event 
} else { 
    // This is something that I do not expect. 
    // .. 
} 
+0

귀하의 답변에 따라 올바른 대답을 찾아 낼 수있었습니다. 감사. – Anthony