Bonjour,
j'ai un problème de suppression automatique d'une variable déclarée sur le heap sous Qt Creator.
lorsque je veux y accéder, le programme ferme brutalement.
Je vous donne mon code de tout le projet:
main.cpp:
et voici mainwindow.h:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
puis mainwindow.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
23
24
25
26
27 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStringListModel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QStringListModel *modele; private slots: void clicSelection(); }; #endif // MAINWINDOW_H
voici la sortie du programme:
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
29
30
31
32
33
34
35
36
37 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QList> #include <QStringList> #include <QStringListModel> #include<QDirModel> #include<QMessageBox> #include<QVariant> QStringList listePays; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); listePays << "France" << "Espagne" << "Italie" << "Portugal" << "Suisse"; QStringListModel *modele = new QStringListModel(listePays); ui->listView->setModel(modele); ui->listView->setEditTriggers(0); connect(ui->affichesel, SIGNAL(clicked()), this, SLOT(clicSelection())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::clicSelection() { QItemSelectionModel *selection = ui->listView->selectionModel(); QModelIndex indexElementSelectionne = selection->currentIndex(); QVariant elementSelectionne = modele->data(indexElementSelectionne,Qt::DisplayRole); QMessageBox::information(this, "Elément sélectionné", elementSelectionne.toString()); }
si je remplace la fonction void MainWindow::clicSelection()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Démarrage de /home/mino/test_listWiew-build-desktop/test_listWiew... Le programme s'est terminé subitement. /home/mino/test_listWiew-build-desktop/test_listWiew s'est terminé avec le code 0 /home/mino/test_listWiew-build-desktop/test_listWiew s'est terminé avec le code 0
par:
cela fonctionne. Il semble que modele soit hors de portée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void MainWindow::clicSelection() { QStringListModel *modele2 = new QStringListModel(listePays); QItemSelectionModel *selection = ui->listView->selectionModel(); QModelIndex indexElementSelectionne = selection->currentIndex(); QVariant elementSelectionne = modele2->data(indexElementSelectionne,Qt::DisplayRole); QMessageBox::information(this, "Elément sélectionné", elementSelectionne.toString()); }
pourquoi?
Merci de bien vouloir m'aider
Partager