Экспериментально выяснил: QEvent.Close (closeEvent(event)) действительно не отправляется ребенку(TestWidget), но после закрытия окна(TestDialog), TestWidget-у отправляется 2 события: QEvent.WindowDeactivate и QEvent.Hide. Любое из них можно обработать.
Вот так работает без сигналов:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class TestWidget(QWidget ):
def __init__( self, parent=None ):
QWidget.__init__( self, parent )
self.verticalLayout = QVBoxLayout(self)
self.label = QLabel("TestLabel", self)
self.verticalLayout.addWidget(self.label)
def event(self,event):
if event.type() == QEvent.Hide:
print "WIDGET", self.label.text()
return QWidget.event(self, event) # Отправляем дальше
class TestDialog(QDialog ):
def __init__( self, *args ):
QWidget.__init__( self, *args )
gridLayout = QGridLayout(self)
self.mywidget = TestWidget(self)
gridLayout.addWidget( self.mywidget, 0, 0, 1, 1)
self.count=0
def closeEvent(self, event):
print "DIALOG"
event.accept()
if __name__ == "__main__":
app = QApplication(sys.argv)
TestDialog().exec_()