2012-06-07 15 views
12

मैंने देखा है कि कोई QWidget दिखाई देने योग्य/अदृश्य होने के लिए कोई सिग्नल/ईवेंट नहीं है। क्या कोई और चीज है जो मैं लगभग एक ही चीज़ प्राप्त करने के लिए हुक कर सकता हूं (मतदान को छोड़कर दृश्यमान()) है?pyqt: जब विजेट दिखाई देता है/छुपा रहता है तो संकेत प्राप्त होता है

यदि डेटा प्रदर्शित करने वाला विजेट दिखाई नहीं देता है तो मैं कुछ डेटा लाने के लिए चाहता हूं।

+0

ध्यान दें कि QWidget बेस क्लास के लिए इसका संकेत नहीं है, तो आप पाएंगे कि कुछ अन्य वर्गों के लिए एक है। क्यूविंडो के पास [दृश्यमान चेंज] है (http://doc.qt.io/qt-5/qwindow.html#visible-prop) उदाहरण के लिए ... जबकि QDockWidget में विचित्र रूप से थोड़ा अलग-अलग नाम है [दृश्यता चेंज] (http: //qt-project.org/doc/qt-4.8/qdockwidget.html#visibilityChanged)। – HostileFork

उत्तर

20

एक समाधान यह है कि आप अपने विजेट (documentation) में QWidget::showEvent() और QWidget::hideEvent() फ़ंक्शन ओवरराइड कर सकते हैं। और फिर emit आप कस्टम signal और संबंधित ऑब्जेक्ट में slot में पकड़ लें। उदाहरण के लिए ..

void MyWidget::hideEvent(QHideEvent *) 
{ 
    // 'false' means hidden.. 
    emit widgetVisibilityChanged(false); 
} 

void MyWidget::showEvent(QShowEvent *) 
{ 
    // 'true' means visible.. 
    emit widgetVisibilityChanged(true); 
} 

अब अगर आप अपने विजेट ओवरराइड नहीं कर सकते, तो आप भी QObject::installEventFilter (QObject * filterObj) और QObject::eventFilter (QObject * watched, QEvent * event) संयोजन (documentation and example) का उपयोग कर अपनी मूल विजेट में ईवेंट ऊपर प्राप्त कर सकते हैं।

संबंधित मुद्दे