Подтвердить что ты не робот

Pyqt: получать сигнал, когда виджет становится видимым/скрытым

Я заметил, что нет сигнала/события, когда QWidget становится видимым/невидимым. Есть ли что-нибудь еще, что я могу подключить, чтобы получить примерно одно и то же (кроме опроса isVisible())?

Я хочу преобразовать некоторые данные, если виджет, отображающий данные, не отображается.

4b9b3361

Ответ 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 ) (документация и пример).