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 :
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();
}
Pas de problème, c'est la version "par défaut"

Maintenant, je transfère la création de QApplication dans un objet :
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();
}
Là, ça plante (d'après le debugeur, un "Segmentation fault" sur QWidget::show)

Si je transfère la création de la fenêtre dans le constructeur, ça fonctionne à nouveau :
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();
}
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
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();
}
Le debugeur me donne un "Segmentation fault" sur QCoreApplication::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