А зачем эта строка: QWidget::closeEvent( ev );
Эта строка нужна в некоторые ситуациях, когда идет самостоятельная обработка эвента. Без вызова метода closeEvent базового класса возможна неправильная работа. Например я таслкнулся с такой ситуацией при переопределении closeEvent в QMdiSubWindow. Поведение проги было странным. Вот что написали троли по этому поводу:
The problem in your code was that you are reimplementing the
closeEvent() method for your MdiChild class and not
calling the base class , QMdiSubWindow::closeEvent( event ).
The closeEvent() method implemantion of QMdiSubWindow invokes a few
other function calls such as d->setActive(false); for making the
subwindow not active. Hence, calling the base class when accepting the
event in the closeEvent() implementation should work. However, it is
recommended that you implement the closeEvent() method of the widget
that you are about set in a subwindow for intercepting the
QEvent::Close event and not closeEvent() of the subwindow itself, as
written in our example basically.