2013-08-02 2 views
0

QGraphicsScene의 고유 서브 클래스가 QGrapnhicsView 뒤에 있습니다 (무시하지 않았습니다). 내 장면에서 일부 마우스 이벤트를 처리합니다 (두 번 클릭 한 번 클릭). 하지만 동시에 내보기 커서 (QtGui.QGraphicsView.ScrollHandDrag)로 스크롤 할 수 있습니다 싶습니다. 뷰 레이어에서 마우스 이벤트가 이미 스크롤을 일으켰거나 장면에 버블 링하지 않으면 어떻게 차단할 수 있습니까?QGraphicsView의 일부 마우스 이벤트를 차단하십시오.

답변

0

mouseMoveEvent 함수를 QGraphicsView에서 구현하고 이벤트를 수락해야합니다.

protected: 
virtual void QGraphicsView::mouseMoveEvent(QMouseEvent * event) 
{ 
    QPoint mouseLocation = event->pos(); 
    // Do stuff 
    event->accept(); 
} 

마우스 이벤트 수락 prevents a parent class from handling that event.

이렇게하면 마우스 이동 이벤트가 전파되지 않습니다. 원하는 작업에 따라 mouseDoubleClickEvent, mousePressEvent, mouseReleasEvent 또는 wheelEvent 함수를 다시 구현할 수도 있습니다. 함수 정의는 모두 QGraphicsView 설명서에 있습니다.

+0

. 마우스 관련 메소드를 오버라이드하고 부모 메소드를 명시 적으로 호출하지 않으면 QGraphicsView의 스크롤 기능이 작동하지 않습니다. 명시 적으로 호출하고 이벤트의 'accept'메소드를 호출하면 아무것도 수행하지 않습니다. 여전히 장면에 전파됩니다. –

+0

클래스 유형'redefinition' 오류입니다. –

0

Qt 설명서에 따라 QGraphicsView의 서브 클래스를 실제로 만들고 새 서브 클래스에 mouseMoveEvent() 메서드를 다시 구현해야합니다.

참조 : 그것은 PySide의 경우에는 작동하지 않습니다http://doc.qt.io/qt-5/qgraphicsview.html#dragMode-prop