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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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