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

Bases de données Discussion :

Problème avec QSqlTableModel : la fenêtre se ferme quand je l'appelle


Sujet :

Bases de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 53
    Points
    53
    Par défaut Problème avec QSqlTableModel : la fenêtre se ferme quand je l'appelle
    Bosoir à tous,
    Voilà j'ai un petit soucis dans mon code. Je souhaite afficher un tableau issu d'une base de donnée (ca c bon) et pouvoir selectionner une ligne du tableau pour pouvoir ulterieurement la modifier ou la supprimer. Mais déjà récupérer les infos de la ligne me pose problème.
    Voici mon code


    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
    ...
         QSqlTableModel *model = new QSqlTableModel;
         model->setTable("Clients");
         model->select();
         model->removeColumn(0);
     
     
         QTableView *view = new QTableView;
         view->setModel(model);
         view->setSelectionBehavior(QAbstractItemView::SelectRows);
     
         // Layout : boutons du bas (ajouter, quitter...)
         modifier = new QPushButton("&Modifier");
         annuler = new QPushButton("&Annuler");
     
         QHBoxLayout *boutonsLayout = new QHBoxLayout;
         boutonsLayout->setAlignment(Qt::AlignLeft);
     
         boutonsLayout->addWidget(modifier);
         boutonsLayout->addWidget(annuler);
     
         QVBoxLayout *layoutPrincipal = new QVBoxLayout;
         layoutPrincipal->addWidget(view);
         layoutPrincipal->addLayout(boutonsLayout);
     
         QWidget *zoneCentrale = new QWidget;
         zoneCentrale->setLayout(layoutPrincipal);
         setCentralWidget(zoneCentrale);
     
         // Connexions des signaux et des slots
         connect(annuler, SIGNAL(clicked()), this, SLOT(menublanc()));
         connect(modifier, SIGNAL(clicked()), this, SLOT(modifierClientBdd()));
    ...

    Et le slot modifierClientBdd()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void FenPrincipale::modifierClientBdd()
    {
        QItemSelectionModel *selection = view->selectionModel();
        QModelIndexList listeSelections = selection->selectedIndexes();
        QString elementsSelectionnes;
     
        for (int i = 0 ; i < listeSelections.size() ; i++)
        {
            QVariant elementSelectionne = model->data(listeSelections[i], Qt::DisplayRole);
            elementsSelectionnes += elementSelectionne.toString() + "<br />";
        }
     
        QMessageBox::information(this, "Eléments sélectionnés", elementsSelectionnes);
    }

    Le code compile, mais qd je clique sur le bouton "modifier" le programme plante...

    Où est mon erreur??

    Merci d'avance

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    C'est un problème de C++ et non de Qt...
    Dans void FenPrincipale::modifierClientBdd() tu utilise view.
    Seulement dans le constructeur tu écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTableView *view = new QTableView;
    ici tu déclare et initialise une variable locale. Et malheureusement, même si elles ont le même nom, ce n'est pas la même que celle que tu as déclaré dans ta class. Donc view n'est pas initialisé.

    Remplace tout simplement cette ligne par A mon avis ce n'est pas la seule dans ce cas.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 53
    Points
    53
    Par défaut
    Merci !!!

    Oui il y avait aussi Model dans le même cas. Ca marche nickel maintenant!!

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut merci
    cela fait 15 jours que je ne trouvais pas mon erreur. merci.

    Citation Envoyé par yan Voir le message
    Salut.
    C'est un problème de C++ et non de Qt...
    Dans void FenPrincipale::modifierClientBdd() tu utilise view.
    Seulement dans le constructeur tu écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTableView *view = new QTableView;
    ici tu déclare et initialise une variable locale. Et malheureusement, même si elles ont le même nom, ce n'est pas la même que celle que tu as déclaré dans ta class. Donc view n'est pas initialisé.

    Remplace tout simplement cette ligne par A mon avis ce n'est pas la seule dans ce cas.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2015, 18h21
  2. Réponses: 1
    Dernier message: 12/02/2015, 15h04
  3. Problème avec QSqlTableModel
    Par init dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2012, 08h20
  4. Réponses: 1
    Dernier message: 31/07/2011, 10h02
  5. Problème avec création de fenêtre dynamique
    Par FredericB dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/09/2005, 18h21

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