[Qt GUI] Crash à la fermeture de l'application
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 !!!
Code:
inline bool isEmpty() const Q_DECL_NOTHROW { return d->end == d->begin; }
Si quelqu'un peut m'aider, merci d'avance
Je vous met le code utilisé
le .h
Code:
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 cpp
Code:
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.h
Code:
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 |
le MainTest.cpp
Code:
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;
} |
et enfin de main.cpp classique
Code:
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();
} |