Bonjour

je suis en train d'essayer de réaliser un éditeur de texte avec Qt en c++ et aimerai avoir quelque éclaircissement

Je n'est pas encore fini loin de la mais je suis déjà confronté à un petit problème

Ma zoneCentrale et en MdiArea (donc possibilité d'ouvrir plusieurs document en même tps) et c'est bien la le problème

en effet j'ai réussi a faire en sorte de pouvoir ouvrir plusieurs documents mais a chaque modif que je fait (renommer, enregistrer) peut importe sur quel document je suis, c'est le dernier ouvert qui se modifie!

voici mon code

D'avance merci

main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#include <QApplication>
#include "MainWindow.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MainWindow fenetre;
    fenetre.show();
 
    return app.exec();
}
MainWindow.h
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
 
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtGui>
 
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
    MainWindow();
 
public slots:
    // slots du menu Fichier
    void nouveauDocument();
    void ouvrirDocument();
    void enregistrer();
    void enregistrerDocumentSous();
    void fermer();
    void renommer();
 
    // slots du menu Afficher
    void modeAffichage();
 
protected:
    // Zone centrale + fenetreDoc
    QMdiArea *m_zoneCentrale; // fenetre centrale
    QMdiSubWindow *m_sousFenetre; // sous fenetre dans la zone centrale
    QTextEdit *m_document; // document dans les sous fenetre
    QLabel *m_texteDetat; // texte dans la barre d'etat
 
    // Menu Fichier
    QMenu *m_menuFichier;
        QAction *m_ActionNouveau;
        QAction *m_ActionOuvrir;
        QAction *m_ActionEnregistrer;
        QAction *m_ActionEnregistrerSous;
        QAction *m_ActionRenommer;
        QAction *m_ActionFermer;
        QAction *m_ActionQuitter;
 
    // Menu Afficher
    QMenu *m_menuAfficher;
        QAction *m_ActionAffichage;
        bool m_onglet;
private:
 
 
};
 
#endif // MAINWINDOW_H
MainWindow.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
 
#include "MainWindow.h"
 
/*** Constructeur ***/
MainWindow::MainWindow()
    :m_onglet(false)
{
    m_document = new QTextEdit;
 
    // QMenu Fichier + QAction correspondante
    m_menuFichier = menuBar()->addMenu("&Fichier");
        m_ActionNouveau = m_menuFichier->addAction("&Nouveau");
        m_ActionNouveau->setIcon(QIcon("icones/nouveau.png"));
        m_ActionNouveau->setShortcut(QKeySequence("Ctrl+N"));
        m_ActionNouveau->setStatusTip("Ouvre un nouveau document vierge");
        connect(m_ActionNouveau,SIGNAL(triggered()),this,SLOT(nouveauDocument()));
 
        m_ActionOuvrir = m_menuFichier->addAction("&Ouvrir");
        m_ActionOuvrir->setIcon(QIcon("icones/ouvrir.png"));;
        m_ActionOuvrir->setShortcut(QKeySequence("Ctrl+O"));
        m_ActionOuvrir->setStatusTip("Ouvre un document existant");
        connect(m_ActionOuvrir,SIGNAL(triggered()),this,SLOT(ouvrirDocument()));
 
        m_ActionEnregistrer = m_menuFichier->addAction("&Enregistrer");
        m_ActionEnregistrer->setIcon(QIcon("icones/enregistrer.png"));
        m_ActionEnregistrer->setShortcut(QKeySequence("Ctrl+E"));
        m_ActionEnregistrer->setStatusTip("Enregistre le document en cours");
        connect(m_ActionEnregistrer,SIGNAL(triggered()),this,SLOT(enregistrer()));
 
        m_ActionEnregistrerSous = m_menuFichier->addAction("Enregistrer &sous");
        m_ActionEnregistrerSous->setIcon(QIcon("icones/enregistrersous"));
        m_ActionEnregistrerSous->setStatusTip("Choix du répertoire dans lequel enregistrer le document");
        connect(m_ActionEnregistrerSous,SIGNAL(triggered()),this,SLOT(enregistrerDocumentSous()));
 
        m_ActionRenommer = m_menuFichier->addAction(("&Renommer"));
        m_ActionRenommer->setIcon(QIcon("icones/renommer.png"));
        m_ActionRenommer->setStatusTip("Renomme le document en cours");
        connect(m_ActionRenommer,SIGNAL(triggered()),this,SLOT(renommer()));
 
        m_ActionFermer = m_menuFichier->addAction("&Fermer");
        m_ActionFermer->setIcon(QIcon("icones/fermer.png"));
        m_ActionFermer->setStatusTip("Ferme le document en cours");
        connect(m_ActionFermer,SIGNAL(triggered()),this,SLOT(fermer()));
 
        m_ActionQuitter = m_menuFichier->addAction(("&Quitter"));
        m_ActionQuitter->setIcon(QIcon("icones/quitter.png"));
        m_ActionQuitter->setStatusTip("Ferme l'application");
        connect(m_ActionQuitter,SIGNAL(triggered()),this,SLOT(close()));
 
    // Menu Afficher + QAction correspondante
    m_menuAfficher = menuBar()->addMenu("&Affichage");
        m_ActionAffichage = m_menuAfficher->addAction("Mode d'&affichage");
        m_ActionAffichage->setIcon(QIcon("icones/affichage.png"));
        m_ActionAffichage->setShortcut(QKeySequence("Ctrl+M"));
        m_ActionAffichage->setStatusTip("Change le mode d'affichage (fenetres ou onglets)");
        connect(m_ActionAffichage,SIGNAL(triggered()),this,SLOT(modeAffichage()));
 
    // ToolBar
    QToolBar *barreDoutil = addToolBar("BarreFichier");
    barreDoutil->addAction(m_ActionNouveau);
    barreDoutil->addAction(m_ActionOuvrir);
    barreDoutil->addAction(m_ActionEnregistrer);
    barreDoutil->addAction(m_ActionEnregistrerSous);
    barreDoutil->addSeparator();
    barreDoutil->addSeparator();
    barreDoutil->addAction(m_ActionAffichage);
 
    // Barre d'etat
    QStatusBar *barreDetat = statusBar();
    m_texteDetat = new QLabel("Status de l'application ... (En cours)");
    barreDetat->addWidget(m_texteDetat);
 
 
    // Définition de la zone centrale
    m_zoneCentrale = new QMdiArea;
    setWindowTitle("OpenDen's");
    setCentralWidget(m_zoneCentrale);
}
 
/*** SLOTS Menu Fichier***/
void MainWindow::nouveauDocument()
{
    // QDialog pour choix du titre du document
    bool ok(false);
    QString titre = QInputDialog::getText(this,"Titre","Titre du document",QLineEdit::Normal,QString(),&ok);
    if(ok)
    {
        if(titre.isEmpty())
            titre="sans titre";
 
        m_document = new QTextEdit;
        m_document->setWindowTitle(titre);
        m_sousFenetre = m_zoneCentrale->addSubWindow(m_document);
        m_document->show();
    }
}
void MainWindow::ouvrirDocument()
{
    QString fichier = QFileDialog::getOpenFileName(this,"Choix du fichier");
    if(!fichier.isEmpty())
    {
        m_document = new QTextEdit;
        QString ligneTampon;
        m_document->setWindowTitle(fichier);
        QFile ouvrir(fichier);
        if(ouvrir.open(QFile::ReadOnly))
        {
            QTextStream in(&ouvrir);
            while(!in.atEnd())
            {
                QString ligne = in.readLine();
                ligneTampon+=ligne+"\n";
            }
            m_document->setPlainText(ligneTampon);
            m_sousFenetre = m_zoneCentrale->addSubWindow(m_document);
            m_document->show();
        }
    }
}
void MainWindow::enregistrer()
{
    int reponse = QMessageBox::warning(this,"Attention","Etes vous sur de vouloir enregistrer le document? Si il existe déja, il sera écrasé!",QMessageBox::Yes,QMessageBox::No);
    if(reponse==QMessageBox::Yes)
    {
        QString fichier(m_document->windowTitle());
        if(!fichier.isEmpty())
        {
            QFile sauvegarder(fichier);
            if(sauvegarder.open(QFile::WriteOnly))
            {
                QTextStream out(&sauvegarder);
                out<<m_document->toPlainText();
            }
        }
        QMessageBox::information(this,"Succes","Enregistrement réussi avec succes!");
    }
    else
        QMessageBox::critical(this,"Attention","Le document n'a pas été enregistrer!");
}
 
void MainWindow::enregistrerDocumentSous()
{
    QString fichier = QFileDialog::getSaveFileName(this,"Enregistrement du fichier");
    if(!fichier.isEmpty())
    {
        QFile sauvegarder(fichier);
        if(sauvegarder.open(QFile::WriteOnly))
        {
            QTextStream out(&sauvegarder);
            out<<m_document->toPlainText();
        }
    }
}
void MainWindow::fermer()
{
    int reponse = QMessageBox::warning(this,"Fermeture du fichier","Voulez vous enregistrer votre travail?",QMessageBox::Yes,QMessageBox::No);
    m_zoneCentrale->closeActiveSubWindow();
 
    if(reponse == QMessageBox::Yes)
        MainWindow::enregistrer();
    else if(reponse == QMessageBox::No)
        QMessageBox::critical(this,"Fermeture","Votre document n'a pas été enregistré");
}
void MainWindow::renommer()
{
    QString nouveauTitre=QInputDialog::getText(this,"Renommer","Veuillez donner le nouveau titre de votre document");
    m_document->setWindowTitle(nouveauTitre);
}
 
/*** SLOTS Menu Afficher ***/
void MainWindow::modeAffichage()
{
    if(m_onglet)
    {
        m_zoneCentrale->setViewMode(QMdiArea::SubWindowView);
        m_onglet=false;
    }
    else
    {
        m_zoneCentrale->setViewMode(QMdiArea::TabbedView);
        m_onglet=true;
    }
}