2013-01-03 9 views
6

Sto visualizzando una finestra popup quando il cursore del mouse si trova su un determinato widget e vorrei nascondere questo popup quando il mouse lascia il widget.Come rilevare che la mia applicazione ha perso la concentrazione in Qt?

Per farlo, ho reimplementato leaveEvent(). Questo sembra funzionare in tutti i casi tranne quando si passa a un'altra applicazione da Alt+Tab. Ho capito che probabilmente ho bisogno di prendere un altro evento, ma in qualche modo non riesco a trovare quello giusto. Puoi suggerirne uno?

risposta

9

L'evento che stai cercando è QEvent::ApplicationDeactivate: "L'applicazione è stata sospesa e non è disponibile per l'utente".

È possibile installare un filtro eventi sull'istanza QApplication per rilevare questo evento. Vedere la documentazione per QObject::installEventFilter(QObject*) per ulteriori dettagli su come funziona.

Poiché Qt 5.2 l'evento QEvent::ApplicationDeactivate è obsoleto. Il modo corretto per identificare quando un'applicazione è disattivata in Qt 5.2 (o successive) consiste nell'utilizzare il segnale QGuiApplication::applicationStateChanged(Qt::ApplicationState state).

+3

Grazie. Ispirato dal tuo suggerimento, ho scoperto che era sufficiente catturare gli eventi QEvent :: Leave e QEvent :: WindowDeactivate nel mio eventFilter e nascondere il mio popup su uno di questi. – Michal