Вам нужно определить свой собственный subWindow
. создать подкласс QMdiSubWindow
и переопределить closeEvent(QCloseEvent *closeEvent)
. Вы можете контролировать это с помощью аргументов. например:
void ChildWindow::closeEvent(QCloseEvent *closeEvent)
{
if(/*condition C*/)
closeEvent->accept();
else
closeEvent->ignore(); // you can do something else, like
// writing a string in status bar ...
}
затем подкласс QMdiArea
и переопределение QMdiArea::closeAllSubWindows ()
, например:
class MainWindowArea : public QMdiArea
{
Q_OBJECT
public:
explicit MainWindowArea(QWidget *parent = 0);
signals:
void closeAllSubWindows();
public slots:
};
// Implementation:
MainWindowArea::closeAllSubWindows()
{
// set close condition (new project is creating, C = true)
foreach(QMdiSubWindow* sub,this->subWindowList())
{
(qobject_cast<ChildWindow*>(sub))->close();
}
}
вам также может понадобиться переопределить слот close
вашей области mdi.