2012-06-07 96 views
12

我注意到當QWidget變成可見/不可見時沒有信號/事件。除了輪詢isVisible())之外,還有其他的東西可以用來獲得大致相同的結果嗎?pyqt:當widget變得可見/隱藏時接收信號

如果顯示數據的窗口部件不可見,我想打開一些數據提取窗口。

+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

一個解決方案是,您可以覆蓋您的小部件中的QWidget::showEvent()QWidget::hideEvent()函數(documentation)。然後emit您自定義signal並在相應的對象中捕獲slot。例如..

void MyWidget::hideEvent(QHideEvent *) 
{ 
    // 'false' means hidden.. 
    emit widgetVisibilityChanged(false); 
} 

void MyWidget::showEvent(QShowEvent *) 
{ 
    // 'true' means visible.. 
    emit widgetVisibilityChanged(true); 
} 

現在,如果你不能覆蓋你的widget,你也可以收到上面使用QObject::installEventFilter (QObject * filterObj)QObject::eventFilter (QObject * watched, QEvent * event)組合(documentation and example)在其父控件的事件。

相關問題