Bonjour à tous
J'essaie de transférer la création de l'objet QApplication hors de main() mais j'obtiens des erreurs d'execution que je ne comprends pas.
Voici les différentes versions testées :
Pas de problème, c'est la version "par défaut"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <QtGui> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow* w = new QMainWindow(); w->show(); return app.exec(); }
Maintenant, je transfère la création de QApplication dans un objet :
Là, ça plante (d'après le debugeur, un "Segmentation fault" sur QWidget::show)
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 #include <QtGui> class Engine { public: Engine(int argc, char *argv[]) { new QApplication(argc, argv); } int exec() { return QApplication::exec(); } }; int main(int argc, char *argv[]) { Engine engine(argc, argv); QMainWindow* w = new QMainWindow(); w->show(); // return engine.exec(); }
Si je transfère la création de la fenêtre dans le constructeur, ça fonctionne à nouveau :
Si ensuite, je crée une fonction spécifique pour créer la fenêtre... ça plante :
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 #include <QtGui> class Engine { public: Engine(int argc, char *argv[]) { new QApplication(argc, argv); QMainWindow* w = new QMainWindow(); w->show(); } int exec() { return QApplication::exec(); } }; int main(int argc, char *argv[]) { Engine engine(argc, argv); return engine.exec(); }
Le debugeur me donne un "Segmentation fault" sur QCoreApplication::exec()
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 #include <QtGui> class Engine { public: Engine(int argc, char *argv[]) { new QApplication(argc, argv); } void show() { QMainWindow* w = new QMainWindow(); w->show(); } int exec() { return QApplication::exec(); } }; int main(int argc, char *argv[]) { Engine engine(argc, argv); engine.show(); return engine.exec(); }
Quelqu'un aurait une explication et une solution pour implémenter la dernière version ?
EDIT : suite à une remarque de Johnlamericain : le code fonctionne sous windows mais pas sous linux
Partager