2013-01-03 5 views
6

마우스 커서가 특정 위젯 위에있을 때 팝업 창이 표시되고 마우스가 위젯을 떠날 때이 팝업을 숨기고 싶습니다.내 응용 프로그램이 Qt에서 포커스를 잃어 버렸음을 감지하는 방법?

이렇게하려면 leaveEvent()을 다시 구현해야합니다. 이것은 Alt+Tab 다른 응용 프로그램으로 전환 할 때를 제외하고 모든 경우에 작동하는 것 같습니다. 나는 다른 이벤트를 잡아야 할 필요가 있다고 생각했지만 어떻게 든 적절한 이벤트를 찾을 수 없다. 하나 제안 할 수 있니?

답변

9

찾고있는 이벤트는 QEvent::ApplicationDeactivate : "응용 프로그램이 일시 중지되었으며 사용자가 사용할 수 없습니다."

QApplication 인스턴스에 이벤트 필터를 설치하여이 이벤트를 캐치 할 수 있습니다. 이 방법에 대한 자세한 내용은 QObject::installEventFilter(QObject*) 설명서를 참조하십시오.

Qt 5.2부터 QEvent::ApplicationDeactivate 이벤트는 더 이상 사용되지 않습니다. Qt 5.2 (또는 그 이상)에서 응용 프로그램이 비활성화 될 때를 식별하는 정확한 방법은 QGuiApplication::applicationStateChanged(Qt::ApplicationState state) 신호를 사용하는 것입니다.

+3

감사합니다. 귀하의 제안에 영감을 얻은 결과, QEvent :: Leave 및 QEvent :: WindowDeactivate 이벤트를 내 eventFilter에서 catch하고 이들 중 하나에서 내 팝업을 숨기는 것으로 충분하다는 것을 알았습니다. – Michal