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

Discussion :

Déclarer QTableView

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .

    Je recommence mon projet , sans Qt Designer .

    Pourquoi ce morceau de code bloque ??
    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
    38
    39
     
    Saisie.h
    #ifndef SAISIE_H
    #define SAISIE_H
     
    #include <QtGui>
    #include <QTableView>
    #include <fenetre.h>
    #include <classe.h>
     
    class Saisie : public QMainWindow
    {
        Q_OBJECT
    public:
       Saisie(QMainWindow *parent = 0);
     
     
    private:
       QStandardItemModel *modele;
       QStringList listeHeader;
       //QStringList listeHeaderFollow;
       QTableView  *tableView;
    };
     
    #endif // SAISIE_H 
    Saisie.cpp
    #include <QTableView>
    #include "saisie.h"
    #include "fenetre.h"
     
    Saisie::Saisie(QMainWindow *parent ) :
        QMainWindow(parent)
     
    {
        modele = new QStandardItemModel(0,3, this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView->setModel(modele);
    }
    Merci .

    Cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 23
    Par défaut
    Sans plus d' infos, impossible d' aller plus loin..

    Tu obtiens quelle erreur?

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    Bonjour,

    Citation Envoyé par Go'Gaule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Saisie::Saisie(QMainWindow *parent ) :
        QMainWindow(parent)
     
    {
        modele = new QStandardItemModel(0,3, this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView->setModel(modele);
    }
    tableView n'est pas initialisé.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .
    Entiz
    Sans plus d' infos, impossible d' aller plus loin..

    Tu obtiens quelle erreur?
    Aucune ..
    C'est bien le problème .
    Juste que cela quitte .. avant la fin de l'installation .

    Je pensais que cela pouvait venir de
    Cordialement

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    un pointeur non initialisé ça donne en général un "segment-fault".

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Initialiser QTableView
    Bonjour à toutes et tous .

    abdou57
    un pointeur non initialisé ça donne en général un "segment-fault".
    L'initialiser ou et comment ?
    Je suis de nouveau complètement perdu .

    Merci .
    Cordialement.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    Bonjour,

    Citation Envoyé par Go'Gaule
    L'initialiser ou et comment ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QTableView *tableView
    où ? dans le constructeur

    comment ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableView = new QTableView()

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Hello,

    je te conseille de jeter un œil au forum C++ et aux tutoriels. La question que tu poses concerne vraiment les bases du C++, pas vraiment la bibliothèque Qt en elle même.

    Une réponse rapide, pour que tu saches où aller chercher: en C++, toute variable doit être déclarée (ce que tu fais dans ton .h avec QTableView *tableView ).
    La valeur de ta variable va dépendre de son type. Ici, en l’occurrence, le type est "pointeur vers QTableView", et la valeur par défaut de ton pointeur est "undefined".

    Il faut donc, pour pouvoir utiliser ta variable pointeur, lui donner une valeur, à savoir l'adresse d'un QTableView.

    Pour faire cela, soit tu lui assignes une adresse déjà existante, ou, dans ton cas, tu lui assignes l'adresse d'un nouveau QTableView que tu vas créer grâce à l'instruction new, comme te le suggère @abdou57.

    Attention, lorsque tu utilises "new", de la mémoire est allouée pour créer ton objet, et c'est à toi de veiller à ce que la mémoire soit restituée (par "delete") lorsque tu n'en a plus besoin. Qt peut t'aider pour cela si tu respectes quelques règles (regarde la FAQ Qt).

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous.

    Merci pour votre aide .
    abdou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Saisie::Saisie(QMainWindow *parent ) :
        QMainWindow(parent)
     
    {
        modele = new QStandardItemModel(0,3, this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView->setModel(modele);
    }
    tableView n'est pas initialisé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Saisie::Saisie(QMainWindow *parent ) :
        QMainWindow(parent)
     
    {
        modele = new QStandardItemModel(0,3, this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView->setModel(modele);
        tableView = new QTableView(this);
    }
    Si j'initialise "tableView" cela ne me donne pas le résultat escompté .
    Cela ouvre une fenêtre avec une 'minuscule' tableView dans le haut de la dite fenêtre ;
    Au départ ce code utilisait une fenêtre Ui_ et tableView était initialisée avec Qt Désigner .

    Cordialement.

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tableView->setModel(modele);
    tableView = new QTableView(this);
    Te rends-tu compte de ce que tu écris ? Si non, merci de relire et d'appliquer le post de sysedit, ça ne sert à rien d'essayer de t'aider alors que tu n'as pas les bases. Ce n'est plus du dessin d'interface là, c'est de la programmation, donc il faut des bases en programmation.

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Bon, si t'as une fenêtre qui s'affiche, je suppose que le code que tu as posté n'est pas exactement celui que tu utilises (et qui fait rager, avec raison, @Troudhyl).

    Le système de Widget de Qt utilise des layouts (jette un oeil à la doc à ce sujet):

    lorsque tu crées un widget A dans un autre widget B, il faut indiquer à Qt quelles sont les relations graphiques entre ces widgets, ce qu'on appelle le layout ; sinon, ton widget A sera collé en haut à gauche de ton widget B, et il n'y aura aucune liaison entre les 2.
    Mettre un layout, ça va permettre de configurer comment le parent réagit quand l'enfant grandit, comment l'enfant réagit quand le parent grandit, comment 2 enfants doivent cohabiter...

    Comme dit, jette un oeil à le doc des layouts pour trouver celui qui te convient le plus.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .

    Je tente de digérer vos explications lol .. Merci à vous !

    sysedit
    Bon, si t'as une fenêtre qui s'affiche, je suppose que le code que tu as posté n'est pas exactement celui que tu utilises (et qui fait rager, avec raison, @Troudhyl).
    Oui , je ne comprenais pas .

    Dans main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Fenetre fenetre;
        fenetre.show();
        Saisie saisie;
        saisie.show();
    Effectivement si met saisie en commentaire plus de deuxième fenêtre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    {
        QHBoxLayout *layout = new QHBoxLayout;
        layout->addWidget(tableView);
        tableView->setLayout(layout);
        modele = new QStandardItemModel(0,3,this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView = new QTableView();
        tableView->setModel(modele);
        setWindowTitle("Affichage des données");
        resize(450,350);
    }
    Pas de changement .

    Cordialement.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    hmm...

    Je me répète peut-être, mais le code que tu as posté montre que les bases du C++ ne sont pas acquises ; il faudrait passer par cette étape avant d'aller plus en avant dans un développement Qt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QHBoxLayout *layout = new QHBoxLayout;
        layout->addWidget(tableView);
        tableView->setLayout(layout);
        modele = new QStandardItemModel(0,3,this);
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
        tableView = new QTableView();    
    tableView->setModel(modele);
        setWindowTitle("Affichage des données");
        resize(450,350);

    Tu crées ton QTableView APRES l'avoir utilisé. Il faudrait d'abord faire les choses dans l'ordre, comme on te l'explique depuis la première réponse.

    Après, pour les layouts, mon conseil a été de jeter un œil à la doc Qt sur ce sujet, je ne peux que le réitérer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(tableView);
        tableView->setLayout(layout);
    Le layout est un élément du parent, pas des enfants. Là, tu crées un layout pour ta tableView, qui va donc définir comment les enfants de la tableView vont se comporter ; ce que tu veux sans doute faire, c'est définir comment la tableView va se comporter en tant qu'enfant de ta fenêtre; c'est donc le layout de ta fenêtre que tu dois définir, et c'est à ce layout que tu dois ajouter ta tableView, une fois que tu l'auras crée.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .

    @sysedit Merci pour ton aide et ta patience .

    sysedit
    ce que tu veux sans doute faire, c'est définir comment la tableView va se comporter en tant qu'enfant de ta fenêtre; c'est donc le layout de ta fenêtre que tu dois définir, et c'est à ce layout que tu dois ajouter ta tableView, une fois que tu l'auras crée.
    Oui c'est bien cela . Mais plus j'essaie de comprendre , plus je m'embrouille .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QWidget fenetre; //Ma fenêtre 
        modele = new QStandardItemModel(0,3,this); //Le contenu de ma tableView
        listeHeader << QString("Nom") << QString("Classement") << QString("Total");
        modele->setHorizontalHeaderLabels(listeHeader);
    QHBoxLayout *layout = new QHBoxLayout; //Je créé mon layout
    layout->addWidget(tableView); //J'insère ma tableView
    fenetre->setLayout(layout);
    Je suis de nouveau dans le noir ..

    Cordialement.

  15. #15
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    C'est quoi "this" si ce n'est pas ta fenêtre ? Ce code est où ?

    Et tu oublies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QWidget fenetre; //Ma fenêtre
    /* ... */
    fenetre->setLayout(layout); //Ça plante car je ne veux pas apprendre le C++

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .

    @Troudhyl Merci . Merci pour tout ... Mais ne te met pas en colère !
    Troudhyl
    QWidget fenetre; //Ma fenêtre
    /* ... */
    fenetre->setLayout(layout); //Ça plante car je ne veux pas apprendre le C++
    Cela n'est pas gentil , car j'essaie depuis plusieurs mois .

    Accepterais de m'expliquer en quelques mots !


    Cordialement.

  17. #17
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Je ne me mets pas en colère, je désespère parce que tu ne fais aucun effort, tu persistes (depuis plusieurs mois c'est vrai) à essayer de comprendre du code Qt (ou qu'on te le corrige jusqu'à ce que "ça marche") alors que tu ne sais même pas le B-A BA de la programmation C++ (ça met pas des mois à apprendre, je dirais 1h suffira). Avant de te lancer dans le moindre code et le moindre projet, tu dois absolument comprendre les concepts etc. Si tu ne fais pas la différence entre objet et pointeur, si tu ne sais pas que l'ordre des lignes d'un code a de l'importance, si tu ne comprends pas l'influence de certains actions sur la mémoire (réservation/lecture/écriture/libération...), alors tu répéteras toujours toujours les mêmes erreurs de base. 1h à lire les bases du C++ ce n'est pas trop si ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Déclarer QTableView
    Bonjour à toutes et tous .
    Troudhyl
    (ou qu'on te le corrige jusqu'à ce que "ça marche")
    Oui , oui , lol .

    Non plus sérieusement , je ne comprends pas en lisant et relisant les explications . Pour des choses simples oui , mais aussitôt que cela ce complique un peu .. je coule .

    Si vous me corrigez sans explications c'est stérile pour moi .
    Je suis conscient que cela demande du temps , de la patience , et plus encore de votre part .. Si vous ne m'aidez pas , je ne vous en tiendrai pas rigueur .

    Merci .

    Cordialement.

  19. #19
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Ce que tu ne comprends pas, c'est que Qt est simple et intuitif. Alors oui, ça quand on t'explique tu comprends, c'est visuel en plus. Après tu peux bien bloquer sur des mécaniques spécifiques (comme les layouts), on est tous passé par là.
    Mais Qt est un framework C++, et donc en faisant du Qt, tu dois comprendre aussi la programmation C++ et de la POO en général. Et ce n'est pas du ressort de cette partie du forum qui est spécialisée dans le framework Qt et donc qui demande certains prérequis pour qu'on puisse se focaliser sur Qt et non sur les lacunes dans les bases. Enfin à mon humble avis.
    Donc ce que j'aurais envie de te dire, c'est reviens vers nous avec tes questions Qt une fois que t'auras appris les bases de la programmation C++ comme conseillé à chaque fois que tu poses une question, tout simplement.

  20. #20
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    maFenetre est du type Fenetre*.
    maSaisie est du type Saisie*.

    Saisie ne dérive pas de Fenetre, donc il est impossible d'affecter un pointeur sur un objet du type Saisie à un pointeur sur un objet du type Fenetre.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. [Property] Comment déclarer une chaine par defaut ?
    Par Clorish dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/09/2004, 23h11
  2. déclarer une nouvelle version de Tomcat
    Par keopsk dans le forum JBuilder
    Réponses: 9
    Dernier message: 02/07/2004, 23h28
  3. Comment déclarer une DataSource dans server.xml
    Par guillaume06 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 16/06/2004, 15h27
  4. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 01h42
  5. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 04h58

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