2011-04-10 2 views
1

내 Gui에 대해 다음 시스템을 사용하고 싶습니다. 작동 방식은 마우스 아래의 위젯이 마우스 나 kb 이벤트를 소비하지 않으면 소모 될 때까지 해당 위젯의 부모에게 전달되거나 데스크탑입니다 에 도달했습니다.gui에서 마우스 및 키보드 이벤트를 부모에게 적용하는 가장 좋은 방법은 무엇입니까?

단 한 가지만 나와 관련이 있습니다. 그 이유는, Button가 그 라벨의 아이의 1 개를 가지는 이유입니다. 레이블을 클릭하면 레이블 아래에있는 내 단추가 클릭을 의미하지는 않습니다 (레이블이 마우스를 사용하지 않으므로).이 경우 바람직하지 않습니다. 즉, (mouseEvent.source == this) {do button stuff} 일 경우 어떻게해야합니까? 당신은 마우스 이벤트를 소비한다 "라벨"의 특별한 종류를 필요로 같은

감사

+0

왜 샘플의 경우는 바람직하지 찾을 수 있지만? 텍스트 레이블이있는 버튼을 사용하면 레이블이 – Erik

+0

@Erik 인 경우 버튼을 클릭해야합니다. 마우스 이벤트를 소비하지 않는 위젯이라고 가정 해 봅니다. – jmasterx

+0

그러면 설명대로 부모에게 컨트롤이 전달됩니다. 좋았어, 왜 그래? 'this'는 붉은 깃발 이니, 여기에 어떻게 필요한지 보지 마라. – Potatoswatter

답변

0

레이블이 하위 위젯 인 경우 레이블은 이벤트를 먹으려고 시도합니다. 일반적으로 레이블에는 처리기 메서드가 없으므로 버튼을 다시 이벤트로 전달합니다.

이 작업을 수행하는 가장 쉬운 방법은 Label 클래스의 하위 클래스를 파생시키고 핸들 함수를 오버라이드하는 것입니다 (툴킷에서 가능하다고 가정 할 때 - 적절한 툴킷에 있어야 함). 그런 다음 핸들 기능을 사용하여 마우스 클릭을 캡처하고 다른 이벤트를 버튼에 다시 전달할 수 있습니다.

포인터를 비교하는 것은 나쁜 생각 일 수 있으며 툴킷이 구현 된 방식에 약간의 영향을받습니다. 예를 들어, 레이블이 아니라 버튼을 소스로 간주 할 수 있습니다.

나는 그것이 ..... 레이블 자체에 위젯입니다 가능성이 매우 이상한

0

는 것 같습니다. 이 특정 사례에 대해 마우스 이벤트를 사용하는 사용자 정의 위젯 (Label에서 파생 됨)을 생성 할 수 있어야합니다.

해당 레이블 위젯이 파생/하위 클래스가 될 수없는 제 3 자의 레이블 인 경우 다른 위젯에 레이블을 래핑해야합니다. 마우스 이벤트를 사용하고 자식 레이블이 하나 뿐인 간단한 위젯 인 원본 레이블.

관련 문제