Ответ 1
Одно из решений: вы можете переопределить функцию 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 )
(документация и пример).