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

Qt Discussion :

Remplir un QWidget a partir d'un fichier


Sujet :

Qt

  1. #1
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut Remplir un QWidget a partir d'un fichier
    Bonjour,

    Je souhaite faire une liste des meilleurs scores contenu dans un fichier score.txt de la forme :
    nomdujoueur score;
    nomdujoueur2 score2;

    Je dispose d'un menu dans lequel j'ai un PushButton qui ouvre une nouvelle QWidget scorefen.
    A l'ouverture, je crée un fichier s'il n'éxiste pas (ici pas de problème).
    Ensuite je veux afficher le contenu de mon fichier dans ma fenetre.
    Mais ici ça ne fonctionne pas, je vais vous donnez les partie importante afin que vous puissiez m'aider :

    3 fichier : main.cpp / C_menu.h / C_menu.cpp


    C_menu.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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    // Ici la fonction qui est un public slots d'un bouton de la 1ère fenetre.
    void C_menu::AfficherScore()
    {
        QWidget *scorefen = new QWidget;
        scorefen->setFont(QFont("Comic Sans MS", 18));
    scorefen->show();
    CreateFile();
    labelrempli = new QLabel*[10];
    FillFile(scorefen);
    }
     
    // La fonction FillFile permet de remplir la fenetre scorefen.
    void C_menu::FillFile(QWidget *scorefen)
    {
     QFile file("score.txt");
     if( !file.exists() )
          {
              CreateFile();
          }
          else
          {
            if (file.open(QFile::ReadOnly))
            {
     
            QTextStream in(&file);
            int j;
                while (!in.atEnd())
                 {
                QString line = in.readLine();
                QStringList listline = line.split(";", QString::SkipEmptyParts);
                label = new QLabel*[listline.size()];
                for(int i=0;i<listline.size();i++)
                {
                    label[i]=new QLabel("");
                }
     
                    for (j = 0;j <= listline.size();j++)
                    {
     
                        QString test = listline[j];
    label[j]->setText(test);
                    //QLabel *affscore = new QLabel(test);
                    //QGridLayout *scoreLayout = new QGridLayout;
                    //scoreLayout->addWidget(label[j], j, 0);
                    //scorefen->setLayout(scoreLayout);
                    }
                }
              }
            }
    }
    J'ai donc essayer 2 technique :
    - j'ai donc fait un split(";") que j'ai mi dans une QStringList, ensuite pour chaque case de la QStringlist je récupère le QString et je crée un QLabel comportant ce QString, ensuite je crée un layout auquelle j'ajoute le QLabel, puis j'insère ce layout dans scorefen.

    Ici j'arrive à afficher seulement 1 ligne.

    J'ai donc pensé à faire un tableau de QLabel mais ça ne marche pas non plus (je vous ai donné ici l'exemple avec le tableau de QLabel, en commentaire la 1ere technique ...)

    Merci de m'éclairer

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    J'ai simplifié un poil ta fonction FillFile() et je dois t'avouer que ça marche mieux

    Après à voir si c'est bien ce que tu veux faire.

    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
     
    void C_menu::FillFile(QWidget *scorefen)
    {
        QFile file("score.txt");
        if( !file.exists() )
        {
            CreateFile();
        }
        else
        {
             if (file.open(QFile::ReadOnly))
            {
                QTextStream in(&file);
                int j;
     
                while (!in.atEnd())
                {
                    QString all = in.readAll();
                    QStringList list = all.split(";", QString::SkipEmptyParts);
                    QGridLayout *scoreLayout = new QGridLayout;
                    for(j=0; j<list.size(); j++)
                    {
                        QLabel *affscore = new QLabel(list[j]);
                        scoreLayout->addWidget(affscore, j, 0);
                    }
                    scorefen->setLayout(scoreLayout);
                }
            }
        }
    }

  3. #3
    Membre actif
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Points : 261
    Points
    261
    Par défaut
    Salut, merci beaucoup pour ta réponse, j'avais trouver la simplification en utilisant des tableau de QLabel, par contre il faut penser à mettre GridLayout avant le while et setlayout apres le while ... sinon ça plante !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/06/2009, 12h57
  2. Remplir une liste dynamiquement à partir d'un fichier PHP
    Par titoff85 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/08/2007, 21h57
  3. Réponses: 2
    Dernier message: 02/03/2007, 15h04
  4. remplir une table a partir d'un fichier
    Par Poulain dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/02/2007, 21h12
  5. Comment remplir un bean a partir d'un fichier xml
    Par NewSer dans le forum Persistance des données
    Réponses: 2
    Dernier message: 02/02/2007, 14h19

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