Bonjour,
J'ai développé une application qui fonctionne correctement mais qui crashe lors de la fermeture.
Je l'ai réduite au minimum pour faire des tests mais rien n'y fait.
La conf minimum consiste en un QMainWindow auquel j'ajoute une statusBar perso.
Cette classe est appelé par un singleton.
A la fermeture de la fenêtre principale j'ai :
Exeption levée : violation d'accès en lecture
this a été 0xFFFFFFFFFFFFFFFF.
Là je cale, j'ai essayé d'analyser la pile d'appel mais en vain
ça plante sur la ligne 114 du ficher qlist.h alors que je n'ai pas de QList !!!
Si quelqu'un peut m'aider, merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part inline bool isEmpty() const Q_DECL_NOTHROW { return d->end == d->begin; }
Je vous met le code utilisé
le .h
le 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 #ifndef STATUSBAR_H #define STATUSBAR_H #include <QStatusBar> class StatusBar : public QStatusBar { Q_OBJECT public: static StatusBar* getInstance(QWidget *parent); private: StatusBar(QWidget *parent); ~StatusBar(); static StatusBar* m_Instance; bool m_bInstance = true; }; #endif
Le MainTest.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 #include "StatusBar.h" StatusBar* StatusBar::m_Instance = (StatusBar*)Q_NULLPTR; StatusBar* StatusBar::getInstance(QWidget *parent) { if (m_Instance == (StatusBar*)Q_NULLPTR) { m_Instance = new StatusBar(parent); } return m_Instance; } StatusBar::StatusBar(QWidget *parent) : QStatusBar(parent) { qDebug("Je passe par le constructeur"); setStyleSheet("background-color: green; color: white"); showMessage("La barre de status est bien présente."); } StatusBar::~StatusBar() { if (m_bInstance) { m_bInstance = false; delete m_Instance; } }
le MainTest.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 #ifndef MAINTEST_H #define MAINTEST_H #include <QtWidgets/QMainWindow> #include "ui_MainTest.h" #include "StatusBar.h" class MainTest : public QMainWindow { Q_OBJECT public: MainTest(QWidget *parent = Q_NULLPTR); ~MainTest(); private: Ui::MainTestClass* ui; StatusBar* m_StatusBar; }; #endif
et enfin de main.cpp classique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "MainTest.h" MainTest::MainTest(QWidget *parent) : QMainWindow(parent), ui( new Ui::MainTestClass() ) { ui->setupUi(this); m_StatusBar = StatusBar::getInstance(parent); setStatusBar(m_StatusBar); } MainTest::~MainTest() { delete ui; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include "MainTest.h" #include <QtWidgets/QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainTest w; w.show(); return a.exec(); }
Partager