2012-06-07 12 views
12

Ich habe festgestellt, dass kein Signal/Ereignis vorliegt, wenn ein QWidget sichtbar/unsichtbar wird. Gibt es noch etwas, das ich haken kann, um ungefähr dasselbe zu erhalten (außer polling isVisible())?pyqt: Signal empfangen, wenn das Widget sichtbar/verborgen wird

Ich möchte einige Daten abrufen, wenn das Widget, das die Daten anzeigt, nicht sichtbar ist.

+0

Beachten Sie, dass, während die QWidget-Basisklasse kein Signal dafür hat, Sie finden, dass es für einige andere Klassen eine gibt. QWindow hat zum Beispiel [visibleChanged] (http://doc.qt.io/qt-5/qwindow.html#visible-prop) ... während QDockWidget den etwas anderen Namen hat [visibilityChanged] (http: //qt-project.org/doc/qt-4.8/qdockwidget.html#visibilityChanged). – HostileFork

Antwort

20

Eine Lösung ist, können Sie QWidget::showEvent() und QWidget::hideEvent() Funktion in Ihrem Widget überschreiben (documentation). Und dann emit Sie benutzerdefinierte signal und fangen in einem slot in dem jeweiligen Objekt. Zum Beispiel ..

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

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

Nun, wenn Sie nicht Ihr Widget außer Kraft setzen können, können Sie auch über Ereignisse in ihrer Mutter Widget erhalten QObject::installEventFilter (QObject * filterObj) und QObject::eventFilter (QObject * watched, QEvent * event) Kombination mit (documentation and example).

Verwandte Themen