¿Cómo capturo un pyqt closeEvent y minimizo el diálogo en lugar de salir?

Tengo un objeto QDialog. Cuando el usuario hace clic en el botón X o presiona Ctrl+Q , quiero que el cuadro de diálogo vaya a una vista minimizada o al icono de la bandeja del sistema, en lugar de cerrarse. ¿Cómo puedo hacer eso?

Una subclase simple que minimiza en lugar de cerrar es la siguiente:

 class MyDialog(QtGui.QDialog): # ... def __init__(self, parent=None): super(MyDialog, self).__init__(parent) # when you want to destroy the dialog set this to True self._want_to_close = False def closeEvent(self, evnt): if self._want_to_close: super(MyDialog, self).closeEvent(evnt) else: evnt.ignore() self.setWindowState(QtCore.Qt.WindowMinimized) 

Puedes probarlo con este fragmento en el intérprete interactivo:

 >>> from PyQt4 import QtCore, QtGui >>> app = QtGui.QApplication([]) >>> win = MyDialog() >>> win.show() >>> app.exec_() #after this try to close the dialog, it wont close bu minimize