2017-01-11 1 views
0

J'ai fait de longues recherches sur le web mais je ne trouve rien de clair. Je pense que la réponse est évidente mais je suis né en Qt. Pourquoi ce code ne fonctionne pas? Mes fenêtres s'ouvrent rapidement.Comment créer et afficher la MainWindow en dehors du Main()?

Main.cpp

#include <QApplication> 
#include "test.h" 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
Test test; 

return a.exec(); 
} 

Test.cpp

#include "test.h" 

Test::Test() 
{ 
MainWindow w; 
w.show(); 
} 

Et celui-ci le travail (la fenêtre ouverte à garder):

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 

Merci!

+1

C'est une question de portée. Votre fenêtre n'existe plus dans votre premier exemple (après que le constructeur a fini) alors que la portée dans le second exemple est aussi longue que main(). – drescherjm

+0

Merci les gars! – Skydyver

Répondre

2

La fenêtre se ferme parce qu'elle est une variable locale du constructeur Test, et lorsque le constructeur quitte, son destructeur est appelé, ce qui le ferme. Vous devez faire de l'objet window une variable membre de la classe Test.

+0

Merci les gars! – Skydyver