2013-09-30 6 views
1

이전에 동일한 위젯에서 마우스를 누르지 않았는지 확인하기 위해 위젯에서 마우스 놓기 이벤트를 캡처하려고합니다. mouseReleaseEvent가 성공적으로 호출되었지만 마우스 위치가 위젯 안에 있는지 확인하기 위해 QMouseEvent 매개 변수를 사용하여 수행 할 작업을 알지 못합니다. 내 현재 코드 : 위젯에서 마우스 놓기 이벤트가 발생했는지 확인하는 방법

void DeviceWidget::mouseReleaseEvent(QMouseEvent* e) 
{ 
    if (_mouseClick) 
    { 
     _mouseClick = false; 
     emit mouseClick(_deviceInformation); 
    } 
} 

당신에게 너무 감사

+0

이 이벤트는 마우스를 놓았을 때 위젯에 있었던 경우에만 트리거해야합니다. 그것을 확인하는 것은 불필요합니다. – RedX

+0

아니요, 마우스를 바탕 화면과 같은 다른 장소에서 놓아도 트리거됩니다. –

+0

[Qt - 절대 위젯 및 커서 위치 결정] (0120-337-005)/Qt-determine-absolute-widget-and-cursor-position – RedX

답변

4

당신은 마우스 출시 이벤트의 로컬 위치가 위젯 내에 있는지 확인해야합니다. 나는 회원 변수 _mouseClick을 사용할 이유가 있다고 생각하지 않습니다. 이 메소드는 마우스가이 위젯에 있던 경우에만 호출됩니다. 버튼을 누르면 위젯이 마우스 추적을 시작하고 마우스를 놓은 위치와 관계없이 릴리스 이벤트를 수신합니다.

void DeviceWidget::mouseReleaseEvent(QMouseEvent* e) 
{ 
    if (rect().contains(e->localPos()->toPoint()) { 
     emit mouseClick(_deviceInformation); 
    } 
} 
관련 문제