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 :

Problème de vecteur (avec un layout)

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Problème de vecteur (avec un layout)
    Mon problème précédent n'étant pas encore résolu (voir: http://www.developpez.net/forums/d11...r/#post6366867, j'ai continué mes débuts (je suis débutant) sur Qt, et j'en suis aux layouts.
    Je me suis dits que je pourrais faire un vector de QPushButton pour m'éviter quelques lignes de codes, mais il me met le message suivant: "'vector' was not declare in this scope"
    D'ailleurs, en passant, qu'est-ce exactement un scope ?

    Voici donc 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
    #include <QApplication>
    #include <QGridLayout>
    #include <vector>
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
     
        vector<QPushButton*> bouton(1, "Bonjour");
        for(int i(0) ; bouton.size()<4 ; i++)
            bouton.push_back("Bonjour");
     
        QGridLayout *layout = new QGridLayout;
        for(int i(0) ; i<bouton.size() ; i++)
            layout->addWidget(bouton[i], 0, i);
     
        fenetre.setLayout(layout);
        fenetre.show();
     
        return app.exec();
    }
    En attendant, je continue de lire mon tuto...
    Merci d'avance pour ceux qui m'aideraient.

  2. #2
    Membre régulier

    Inscrit en
    Octobre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 69
    Points : 110
    Points
    110
    Par défaut
    "'vector' was not declare in this scope"
    Jette un coup d'oeil à la FAQ sur les namespaces.

    Tu peux aussi utiliser la classe QVector de Qt.

    D'ailleurs, en passant, qu'est-ce exactement un scope ?
    Le scope c'est la portée d'un identifiant, la portion du code source dans laquelle il est défini ou encore la portion au delà de laquelle l'identifiant n'est plus défini.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void foo()
    {
        int a;
        ...
    }
    La portée de la variable a se limite à la fonction foo(). En dehors de cette fonction, a n'existe plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton.push_back("Bonjour");
    Par ailleurs, là tu es en train d'ajouter une chaîne de caractères dans le vector au lieu d'un QPushButton.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    J'ai avancé un peu entre temps, j'ai décidé de faire avec QVector.
    Mais je n'arrive pas à m'en servir.
    En fait, mon but (peut-être l'as-tu deviné), c'est de rassembler tout mes boutons dans un vecteur pour pouvoir utiliser des boucles pour ajouter mes boutons dans le layout.
    Pourrais-tu me montrer un exemple avec deux boutons ? (qui compile évidemment)
    Tu me diras sûrement que tu ne devrais pas me donner une réponse et que je devrais chercher tout seul...
    Mais en cherchant sur google, je trouve des choses pas très claires, et je ne trouve pas comment faire dans mon cas.

    Mon code en est à là:
    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
    #include <QApplication>
    #include <QGridLayout>
    #include <QVector>
    #include "MaFenetre.h"
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
     
        QVector<QPushButton*> bouton();
        for(int i(0) ; bouton.size()<4 ; i++)
            bouton.push_back(QPushButton());
     
        QGridLayout *layout = new QGridLayout();
        for(int i(0) ; i<bouton.size() ; i++)
            layout->addWidget(bouton[i], 0, i);
     
        fenetre.setLayout(layout);
        fenetre.show();
     
        return app.exec();
    }
    Quand je compile ceci, il m'affiche toutes ces erreurs:
    erreur : request for member 'size' in 'bouton', which is of non-class type 'QVector<QPushButton*>()'
    erreur : request for member 'push_back' in 'bouton', which is of non-class type 'QVector<QPushButton*>()'
    erreur : request for member 'size' in 'bouton', which is of ;
    non-class type 'QVector<QPushButton*>()'

    avertissement : pointer to a function used in arithmetic
    erreur : no matching function for call to 'QGridLayout::addWidget(QVector<QPushButton*> (&)(), int, int&)'
    . candidates are: void QGridLayout::addWidget(QWidget*)
    . note: void QGridLayout::addWidget(QWidget*, int, int, Qt::Alignment)
    . note: void QGridLayout::addWidget(QWidget*, int, int, int, int, Qt::Alignment)


    Merci d'avance.

    Bon, je suis pas pressé, parce qu'en attendant, je continue le tuto et je fais sans les vecteurs, qui sont loin d'être indispensables.

  4. #4
    Membre régulier

    Inscrit en
    Octobre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 69
    Points : 110
    Points
    110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QVector<QPushButton*> bouton();
    Ta principale erreur vient de là, tu es en train d'appeler la fonction bouton() qui renvoie un tableau de QPushButton*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i(0) ; bouton.size()<4 ; i++)
    Pourquoi recalculer la taille du tableau à chaque tour de boucle, si tu veux ajouter 4 boutons, autant faire une simple boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 1; i <= 4; ++i)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton.push_back(QPushButton());
    Là, tu es en train d'ajouter un QPushButton au tableau alors que ce dernier est censé contenir des pointeurs QPushButton*

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    C'est bon, mon problème est résolu, merci Feysal.
    Mon code final est :
    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
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
     
        QVector<QPushButton*> bouton;
        for(int i(0) ; i<4 ; i++)
            bouton.push_back(new QPushButton("Bouton vide"));
     
        QGridLayout *layout = new QGridLayout();
        for(int i(0) ; i<4 ; i++)
            layout->addWidget(bouton[i], 0, i);
     
        fenetre.setLayout(layout);
     
        fenetre.show();
     
        return app.exec();
    }
    Et ça fonctionne.

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

Discussions similaires

  1. [Layout] Problème de lettre avec accent
    Par kanzarih dans le forum Autres composants
    Réponses: 1
    Dernier message: 22/04/2009, 07h35
  2. Problème avec setLayout(layout);
    Par lolotte dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2008, 11h44
  3. Problème dans boucle avec matrice et vecteur
    Par lilyla dans le forum MATLAB
    Réponses: 9
    Dernier message: 26/11/2007, 19h45
  4. Problème d'itération avec un vecteur
    Par lovecpp dans le forum SL & STL
    Réponses: 11
    Dernier message: 13/09/2007, 10h37
  5. problème avec struts-layout
    Par khayri dans le forum Struts 1
    Réponses: 1
    Dernier message: 16/04/2007, 10h36

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