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).
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