2012-06-07 6 views
12

QWidget이 보이거나 보이지 않을 때 신호/이벤트가 없음을 발견했습니다. (isVisible()을 폴링하는 것을 제외하고) 대략 동일한 것을 얻기 위해 내가 걸 수있는 다른 것이 있습니까?pyqt : 위젯이 보이거나 숨겨지면 신호를받습니다.

데이터를 표시하는 위젯이 보이지 않으면 일부 데이터 가져 오기를 원합니다.

+0

QWidget 기본 클래스에는 이에 대한 신호가 없지만 일부 다른 클래스에는 하나의 클래스가 있음을 알 수 있습니다. 예를 들어, QWindow에는 [visibleChanged] (http://doc.qt.io/qt-5/qwindow.html#visible-prop)가 있습니다 ... QDockWidget에는 약간 다른 이름 [visibilityChanged] (http : //qt-project.org/doc/qt-4.8/qdockwidget.html#visibilityChanged). – HostileFork

답변

20

위젯 (documentation)에서 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) 조합 ( documentation and example)를 사용하여 부모 위젯의 이벤트 이상받을 수 있습니다.

관련 문제