19

QWidget が表示/非表示になったときのシグナル/イベントがないことに気付きました。ほぼ同じものを取得するためにフックできるものは他にありますか (ポーリング isVisible() を除く)?

データを表示するウィジェットが表示されていない場合、データの取得を無効にしたいと考えています。

4

1 に答える 1

31

解決策の 1 つは、ウィジェットでオーバーライドQWidget::showEvent()して機能させることです (ドキュメント)。そして、それぞれのオブジェクトで aをカスタマイズしてキャッチします。例えば..QWidget::hideEvent()emitsignalslot

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 )組み合わせを使用して、親ウィジェットで上記のイベントを受け取ることもできます(ドキュメントと例)。

于 2012-06-07T07:11:48.000 に答える