Vous devez définir votre propre subWindow
. créez une sous-classe QMdiSubWindow
et remplacez la closeEvent(QCloseEvent *closeEvent)
. vous pouvez le contrôler par argument. par exemple:
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 ...
}
sous-classe puis la QMdiArea
et substituez QMdiArea::closeAllSubWindows()
comme ceci:
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();
}
}
vous pouvez aussi avoir besoin de passer outre sous close
de votre zone IMD.
Pourriez-vous sous-classer QMdiArea et remplacer les méthodes par défaut closeActiveSubWindow/closeAllSubWindows pour ne pas fermer la fenêtre lorsque l'utilisateur le demande? – Tuminoid