2012-06-07 28 views
12

He notado que no hay señal/evento para cuando un QWidget se vuelve visible/invisible. ¿Hay algo más que pueda enganchar para obtener más o menos lo mismo (excepto que el sondeo sea visible())?pyqt: recibir señal cuando el widget se vuelve visible/oculto

Quiero pasar algunos datos a buscar si el widget que muestra los datos no está visible.

+0

Tenga en cuenta que si bien la clase base QWidget no tiene una señal para esto, encontrará que hay una para algunas otras clases. QWindow tiene [visibleChanged] (http://doc.qt.io/qt-5/qwindow.html#visible-prop) por ejemplo ... mientras que QDockWidget tiene el nombre extrañamente ligeramente diferente [visibilityChanged] (http: //qt-project.org/doc/qt-4.8/qdockwidget.html#visibilityChanged). – HostileFork

Respuesta

20

Una solución es, puede anular la función QWidget::showEvent() y QWidget::hideEvent() en su widget (documentation). Y luego emit personalizado signal y atrapar en un slot en el objeto respectivo. Por ejemplo ..

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

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

Ahora bien, si no es posible anular el widget, también puede recibir por encima de los acontecimientos en su widget padre utilizando QObject::installEventFilter (QObject * filterObj) y QObject::eventFilter (QObject * watched, QEvent * event) combinación (documentation and example).

Cuestiones relacionadas