[Qt] Gestion de addSubWindow

Résolu
Bonjour,

J'essaie de programmer un éditeur de texte basique pour me faire la main. Sauf que je rencontre un petit problème.
Je veux implémenter un SLOT qui crée dans mon cas crée un nouveau document et ouvre une nouvelle fenêtre. La zone centrale est de type MDI donc j'essaie de le faire avec la fonction addSubWindow. Mon code compile bien, le programme ne plante à aucun moment, mais lorsque je clique sur Nouveau, rien ne se passe et ne s'affiche.

J'aimerais comprendre mon erreur.

merci d'avance.

Voici le code

//////////////////////Le .h///////////////////////////////
#ifndef HEADER_FENPRINCIPALE
#define HEADER_FENPRINCIPALE

#include <QtGui>

class FenPrincipale : public QMainWindow
{
Q_OBJECT
public:
FenPrincipale();

public slots:
void CreationFenetre();

private:

QMdiArea *zoneCentrale;
QTextEdit *zoneTexte1;
QMdiSubWindow *sousFenetre1;
};

#endif

//////////////////////Le .CPP////////////////////////////

#include "FenPrincipale.h"

FenPrincipale::FenPrincipale()
{
// Création des menus

QMenu *menuFichier = menuBar()->addMenu("&Fichier");
QAction *actionNouveau = menuFichier->addAction("&Nouveau");
actionNouveau->setShortcut(QKeySequence("Ctrl+N"));
QAction *actionOuvrir = menuFichier->addAction("&Ouvrir");
actionOuvrir->setShortcut(QKeySequence("Ctrl+O"));
QAction *actionSauver = menuFichier->addAction("&Enregistrer");
actionSauver->setShortcut(QKeySequence("Ctrl+S"));
QAction *actionSauverSous = menuFichier->addAction("Enregistrer sous...");

QAction *actionImprimer = menuFichier->addAction("&Imprimer");
actionImprimer->setShortcut(QKeySequence("Ctrl+P"));
QAction *actionQuitter = menuFichier->addAction("&Quitter");
actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));

QMenu *menuEdition = menuBar()->addMenu("&Edition");

QMenu *menuFormat = menuBar()->addMenu("&Format");
QAction *actionPolice = menuFormat->addAction("&Police");

QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
QAction *actionBarre = menuAffichage->addAction("&Barre d'état");

// Création de la zone centrale

zoneCentrale = new QMdiArea;
QMdiSubWindow *sousFenetre1;
QTextEdit *zoneTexte1;

setCentralWidget(zoneCentrale);

connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(actionNouveau, SIGNAL(triggered()), this, SLOT(CreationFenetre()));

}

void FenPrincipale::CreationFenetre()
{

zoneTexte1 = new QTextEdit;
sousFenetre1= new QMdiSubWindow;
sousFenetre1 = zoneCentrale->addSubWindow(zoneTexte1);

}

///////////////Le main ///////////////////////////////
#include <QApplication>
#include <QtGui>
#include "FenPrincipale.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

FenPrincipale fenetre;
fenetre.show();

return app.exec();
}
Configuration: Windows 7 / Firefox 3.5.7

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. J'ai essayer d'ajouter this->show() mais ça ne change rien.
    1. Mais ce n'est pas 'this' qu'il faut montrer, mais ta nouvelle fenêtre !
      sousFenetre1= new QMdiSubWindow;
      ...
      sousFenetre1->show();
      Bonne continuation.
  2. Contributeur
    Il manque peut être un appel à show lors de la création.