Détecter la fermeture d'une QMdiSubWindow
Bonjour,
Je suis en train de réaliser un simple éditeur.
J' ai une fenêtre principale qui contient une "mdiArea", dont voilà le ".h" de cette fenêtre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#ifndef MINIEDITOR_H
#define MINIEDITOR_H
#include <QMainWindow>
namespace Ui {
class miniEditor;
}
class miniEditor : public QMainWindow
{
Q_OBJECT
public:
explicit miniEditor(QWidget *parent = 0);
~miniEditor();
private slots:
void on_actionNouveau_triggered();
void on_actionFermer_triggered();
void on_actionEnregistrer_sous_triggered();
void on_actionQuitter_triggered();
private:
Ui::miniEditor *ui;
};
#endif // MINIEDITOR_H |
voilà le "minieditor.cpp" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include "minieditor.h"
#include "ui_minieditor.h"
#include <QMdiSubWindow>
#include <QTextEdit>
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
unsigned int nbDocuments = 0;
miniEditor::miniEditor(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::miniEditor)
{
ui->setupUi(this);
ui->actionEnregistrer->setEnabled(false);
ui->actionEnregistrer_sous->setEnabled(false);
ui->actionFermer->setEnabled(false);
this->setCentralWidget(ui->mdiArea);
}
miniEditor::~miniEditor()
{
delete ui;
}
void miniEditor::on_actionNouveau_triggered()
{
QSize mdiAreaSize = ui->mdiArea->size();
QMdiSubWindow* subWindow = new QMdiSubWindow();
subWindow->setFixedSize(mdiAreaSize);
nbDocuments++;
subWindow->setWindowTitle("Document #"+QString::number(nbDocuments));
subWindow->setWidget(new QTextEdit());
ui->mdiArea->addSubWindow(subWindow);
subWindow->show();
ui->actionEnregistrer->setEnabled(true);
ui->actionEnregistrer_sous->setEnabled(true);
ui->actionFermer->setEnabled(true);
}
void miniEditor::on_actionFermer_triggered()
{
QMdiSubWindow *theActiveSubWindow = new QMdiSubWindow();
theActiveSubWindow = ui->mdiArea->activeSubWindow();
if (theActiveSubWindow != 0)
{
theActiveSubWindow->close();
nbDocuments--;
}
if (nbDocuments == 0)
{
ui->actionEnregistrer->setEnabled(false);
ui->actionEnregistrer_sous->setEnabled(false);
ui->actionFermer->setEnabled(false);
}
}
void miniEditor::on_actionQuitter_triggered()
{
this->close();
} |
Comme vous le constater, je désactive les actions "Enregistrer sous", "Enregistrer" et "Fermer" du menu "Fichier" lorsque il a aucune sous fenêtre dans la mdiArea.
Ça marche uniquement lorsque je clique sur "Fermer", mais si je clique sur le bouton "fermer" (la croix) de menu système de la sous fenêtre, ça ne marche pas.
Comment détecter la fermeture d'une sous fenêtre avec la croix de son menu système pour décrémenter la variable "nbDocuments" et si cette dernière arrive à "0" donc on désactive les trois actions "Enregistrer sous", "Enregistrer" et "Fermer" du menu "Fichier".
Merci