2013-01-03 33 views
6

जब मैं माउस कर्सर एक निश्चित विजेट पर होता हूं तो मैं पॉपअप विंडो प्रदर्शित कर रहा हूं और जब माउस विजेट छोड़ देता है तो मैं इस पॉपअप को छिपाना चाहता हूं।यह पता लगाने के लिए कि मेरा आवेदन क्यूटी में फोकस खो गया है?

ऐसा करने के लिए, मैंने leaveEvent() को फिर से कार्यान्वित किया। यह Alt+Tab द्वारा किसी अन्य एप्लिकेशन पर स्विच करते समय सभी मामलों में काम करता है। मुझे पता चला कि मुझे शायद एक और घटना पकड़ने की जरूरत है, लेकिन किसी भी तरह से मुझे उचित नहीं मिल रहा है। क्या आप एक सुझाव दे सकते हैं?

उत्तर

9

जो ईवेंट आप खोज रहे हैं वह QEvent::ApplicationDeactivate है: "एप्लिकेशन निलंबित कर दिया गया है, और उपयोगकर्ता के लिए अनुपलब्ध है"।

आप इस घटना को पकड़ने के लिए अपने QApplication उदाहरण पर एक ईवेंट फ़िल्टर इंस्टॉल कर सकते हैं। अधिक जानकारी के लिए यह कैसे काम करता है QObject::installEventFilter(QObject*) के लिए प्रलेखन देखें।

चूंकि क्यूटी 5.2 QEvent::ApplicationDeactivate घटना बहिष्कृत है। Qt 5.2 (या बाद में) में कोई एप्लिकेशन निष्क्रिय होने पर पहचानने का सही तरीका QGuiApplication::applicationStateChanged(Qt::ApplicationState state) सिग्नल का उपयोग करना है।

+3

धन्यवाद। आपके सुझाव से प्रेरित होकर, मैंने पाया कि यह मेरे ईवेंट में QEvent :: Leave और QEvent :: WindowDeactivate ईवेंट दोनों को पकड़ने के लिए पर्याप्त था फ़िल्टर करें और इनमें से किसी एक पर मेरे पॉपअप को छुपाएं। – Michal