IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

probleme de supression automatique d'une variable sur le heap


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut probleme de supression automatique d'une variable sur le heap
    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:
    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();
    }
    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
    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
    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
    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());
    }
    voici la sortie du programme:
    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
    si je remplace la fonction void MainWindow::clicSelection()
    par:
    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());
    
    }
    cela fonctionne. Il semble que modele soit hors de portée.
    pourquoi?
    Merci de bien vouloir m'aider

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 618
    Par défaut
    Salut,

    Tu redéfinis modele dans ton constructeur (QStringListModel *modele = new...), c'est donc cette variable local qui est alloué dans le constructeur, et non ton membre.

    Petit truc: Par convention, on préfixe les membre avec m_ (m_modele). Ca permet d'y voir plus claire et d'aider à éviter ce genre d'embuche .

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    Salut,

    merci beaucoup ,ça a marché, j'ai mis le pointeur en variable globole et ça a marché
    cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/01/2012, 00h31
  2. [XSLT] probleme de resultat retourné par une variable
    Par coucouA dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/08/2006, 11h05
  3. probleme pour faire gotoandplay suivant une variable
    Par logone dans le forum ActionScript 1 & ActionScript 2
    Réponses: 26
    Dernier message: 09/05/2006, 10h18
  4. ajouter une variable sur un control
    Par gijy dans le forum MFC
    Réponses: 15
    Dernier message: 21/03/2006, 18h18
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo