문제

응용 프로그램의 기본 창이 언제 이동했는지 확인하려고합니다. 기본 창은 표준 Qmainwindow이며 Qmainwindow의 MoveEvents를 찾기 위해 Qapplication에 EventFilter를 설치했지만 아무도 트리거되지 않습니다. 여러 가지 이유로 Qmainwindow를 서브 클래스하는 것은 실제로 옵션이 아닙니다.

이에 대한 모든 생각은 QTimer TTO를 시작하는 것 외에도 지속적으로 입장을 확인하는 것 외에도 크게 높이 평가 될 것입니다.

도움이 되었습니까?

해결책

응용 프로그램 대신 최상위 창에 이벤트 필터를 설치하는 것이 좋습니다. 그러나 여전히 얻지 못한 경우 QMoveEvents 그리고 당신은 창에서 일하고 있습니다. winEventFilter() 그리고 기다립니다 WM_MOVE. Linux 및 Mac에서도 유사한 기능을 사용할 수 있습니다.

나는 보통 플랫폼 독립성을 깨는 것이 좋지 않지만 때로는 의미가있을 수 있습니다.

다른 팁

서브 클래싱은 실제로 가장 좋은 솔루션입니다 :-/

최상위 창을 구현하는 클래스에서는이 기능을 과부하시키기 만하면됩니다.

virtual void moveEvent ( QMoveEvent * event )

문서에서 :

이 이벤트 핸들러는 이벤트 매개 변수에 전달되는 위젯 이동 이벤트를 수신하기 위해 서브 클래스로 다시 구현할 수 있습니다. 위젯 이이 이벤트를 받으면 이미 새로운 위치에 있습니다.

이전 위치는 qmoveevent :: Oldpos ()를 통해 액세스 할 수 있습니다.

이를 통해 기본 창이 이동 한 경우 감지 할 수 있습니다. 왜 서브 클래스 할 수 없습니까? 인스턴스를 사용하고 있습니까? QMainWindow 곧장? 일반적인 사용 사례는 어쨌든 서브 클래스입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top