Partage
  • Partager sur Facebook
  • Partager sur Twitter

[QT] Problème avec fichier

Porbleme avec QT pour lire un fichier et ecrire dans une liste

Sujet résolu
    12 juillet 2007 à 14:32:56

    Bonjour.
    Mon problème est simple et il est deja bien énoncé dans le titre :p
    Je veux :
    • lire une ligne d'un fichier texte
    • stocker cette ligne dans une variable
    • afficher cette variable dnas une QListWidget


    ..et je n'y arrive pas et je ne sais pas pourquoi!
    J'ai déjà essayé je ne sais pas combien de méthode mais rien ne s'affiche dans ma liste.

    Un peu de code pour illustrer:

    QListWidget * Liste = new QListWidget(this);
    QString line;
    //lecture dans le fichier
    Liste->addItem(line);


    Ceci ne fonctionne pas


     QListWidget * Liste = new QListWidget(this);
     QString line("salut");
     Liste->addItem(line);
     


    En revanche ce code m'affiche bien salut dans ma liste donc le probleme vient de la lecture du fichier.
    Je ne done volontairement pas de détail sur LES methodes que j'ai essayé pour lire car j'en ai tellement essayé :D !!!
    Donc si queqlqu'un conait une bonne methode pour résoudre mon problème je le remercie d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      12 juillet 2007 à 16:14:23

      Bonjour, je vais essayer de t'aider sans tout te donner sur un plat.
      Bon déjà, il nous faut nous armer de la documentation, c'est essentiel.
      http://doc.trolltech.com/4.3/index.html

      Déjà, pour avoir une idée de comment on ouvre un fichier et de comment on le lit, on commence par étudier les exemples situés dans le dossier Qt. Pour ouvrir un fichier, avec un peu de bon sens, on va vite trouver la classe QFile, après je te laisse la regarder. On s'aperçoit que cette classe ne permet pas l'écriture ou même la lecture, donc on va utiliser la classe QTextStream. Parmi les méthodes de la classe QTextStream, on trouve la méthode readLine qui semble par son nom correspondre à tes besoins. Normalement, ça répond à tes 2 premières questions.

      Le troisième problème ne se pose pas car si tu résouds les deux premiers, il disparait.

      Amicalement Mercosuh :D

      PS: si vraiment tu peines à lire une ligne, je t'aiderai davantage en te donner un morceau de code.

      • Partager sur Facebook
      • Partager sur Twitter
        12 juillet 2007 à 16:59:42

        Merci bien Mercoush. Je travaille déjà avec la documentation QT. C'est d'ailleur avec elle que j'ai fait mes nombreux essais. Je suis donc allé voir QFile et je me suis débrouiller un peu comme j'ai pu avec les exemples donnés car je ne comprenais pas tout ^^
        En tout cas merci pour tes explications claires je vais ressayé (mais j'ai déjà essayé en utilisant QTextStream et readLine).
        A mon avis je les avais mal utilisé.
        Je vais donc rééssayé et si ca ne marche toujours pas je donnerais le code complet :p
        • Partager sur Facebook
        • Partager sur Twitter
          12 juillet 2007 à 17:29:08

          Pas de problème, n'hésites pas à demander si tu as problème. :)

          Mercosuh :)
          • Partager sur Facebook
          • Partager sur Twitter
            12 juillet 2007 à 17:58:26

            Ben ca ne marche pas :(
            Voici donc le code qui ne marche pas:


                                  QListWidget * Liste = new QListWidget(this);
                                  Liste->setGeometry( 10 , 100 , 150 , 400);

                                  QFile * file = new QFile( "liste.txt" );
                                  file->open(QIODevice::ReadOnly );
                                  QTextStream stream(file );
                                  QString line;
                                  line = stream.readLine();

                                  Liste->addItem(line);
             


            J'ai vérifié à l'aide d'un label: c'est bien l'ouverture du ficheir qui ne vas pas.
            Si quelqu'un voit l'erreur..moi je ne la voit pas ^^
            • Partager sur Facebook
            • Partager sur Twitter
              12 juillet 2007 à 18:03:30

              si c'est un fichier texte, tu peux faire directement :
              QString line = QString(file->readLine());
              • Partager sur Facebook
              • Partager sur Twitter
                12 juillet 2007 à 18:07:24

                Merci minirop..dans ce cas si je comprend bien on n'utilise plus la classe QTextStream
                Je ne comrpend donc plus grand chose :o
                Mais en tout cas :

                QListWidget * Liste = new QListWidget(this);
                                      Liste->setGeometry( 10 , 100 , 150 , 400);
                                      QFile * file = new QFile( "liste.txt" );
                                      file->open(QIODevice::ReadOnly );
                                      QString line = QString(file->readLine(256));
                                      Liste->addItem(line);
                 


                Ca ne marche pas ^^

                Edit : j'ai peut-être oublié de dire que je suis sur que le fichier texte existe dans le même dossier que l'executable.
                De toute facon, il me semble que le programme plante quand il n'arrive pas à ouvrir un fichier en mode Lecture!
                • Partager sur Facebook
                • Partager sur Twitter
                  12 juillet 2007 à 18:16:57

                  je viens de tester et j'ai toujours "file not found" :o

                  essaye ceci :
                  if(!file->open(QIODevice::ReadOnly ))
                  {
                      QMessageBox::about(this,"error","fichier non ouvert");
                  }

                  et regarde si ton fichier est ouvert ou pas.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juillet 2007 à 18:23:21

                    En effet mon fichier n'est même pas ouvert!!
                    Je vais envoyé tout le code. On sait jamais un truc bête mais vraiment je ne vois pas :(


                     #include <QApplication>
                     #include <QFont>
                     #include <QGridLayout>
                     #include <QLCDNumber>
                     #include <QPushButton>
                     #include <QSlider>
                     #include <QVBoxLayout>
                     #include <QHBoxLayout>
                     #include <QWidget>
                     #include <QSpinBox>
                     #include <QRect>
                     #include <QListWidgetItem>
                     #include <QListWidget>
                     #include <QSqlDatabase>
                     #include <QSqlQuery>
                     #include <QVariant>
                     #include <QString>
                     #include <QChar>
                     #include <QFile>
                     #include <QTextStream>
                     #include <QMessageBox>


                    #include <iostream>
                    #include <cstdlib>
                    #include <fstream>


                    #include "defines.h"

                     using namespace std;



                    /**************************************************************************************
                    ********************CLASSES DE DEFINITION DES WIDGETS**********************************
                    **************************************************************************************/


                       /********CLASSE DEFINISSANT LE WIDGET CONTENANT LES BOUTONS**************/
                       class WBoutons : public QWidget
                       {
                           public:
                           //declaration du constructeur inline
                           WBoutons(QWidget *parent): QWidget(parent)
                           {
                               QPushButton * BtNouveau = new QPushButton("Nouveau" , this);
                               BtNouveau->setGeometry(75 , 10 , 150 , 20);
                               
                               QPushButton * BtEdit = new QPushButton("Modifier" , this);
                               BtEdit->setGeometry(325 , 10 , 150 , 20);
                               
                               QPushButton * BtSuppr = new QPushButton("Supprimer" , this);
                               BtSuppr->setGeometry(575 , 10 , 150 , 20);

                           }

                       };


                       /********CLASSE DEFINISSANT LE WIDGET CONTENANT LA LISTE*****************************/
                       class WListe : public QWidget
                       {
                           public:
                           //declaration du constrcuteur inline
                           WListe(QWidget *parent): QWidget(parent)
                           {


                                          QListWidget * Liste = new QListWidget(this);
                                          Liste->setGeometry( 10 , 100 , 150 , 400);
                                          QFile * file = new QFile("liste.txt");

                                          if(!file->open(QIODevice::ReadOnly ))
                    {
                        QMessageBox::about(this,"error","fichier non ouvert");
                    }
                                          QString line = QString(file->readLine(256));
                                          Liste->addItem(line);



                           }
                       };


                    /***************************************************************************************
                    ************************************FONCTION MAIN***************************************
                    ****************************************************************************************/


                     int main(int argc, char *argv[])
                     {
                         /******************************INITIALISATIOn DE QT*********************************/
                         QApplication app(argc, argv);
                         /***********************************************************************************/


                         /*****************************CREATION DE LA FENETRE*********************************/
                         QWidget window;
                         window.resize(LARGEUR_FENETRE, HAUTEUR_FENETRE);
                         /************************************************************************************/


                        /********************************DECLARATION DES WIDGETS *********************/
                        WListe ListMembres(&window);
                        WBoutons Boutons(&window);
                        /************************************************************************************/



                         /****************************AFFICHAGE DE LA FENETRE*******************************/
                         window.show();
                         /**********************************************************************************/


                         return app.exec();
                     }


                     



                    Faut pas faire attention à tous les includes. Ce programme m'a servi à pas mal de tests et j'ai laissé les includes ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 juillet 2007 à 18:24:39

                      Salut, je viens de faire ce code et ça marche
                      #include <QtGui>
                      #include <QApplication>

                      class MainWindow : public QMainWindow
                      {
                              public:
                                      MainWindow();
                      };

                      MainWindow::MainWindow()
                      {
                              QFile file(tr("texte.txt"));
                              if(!file.open(QFile::ReadOnly))
                              {
                                      // erreur
                              }
                             
                              QTextStream in(&file);
                              QListWidget *listWidget = new QListWidget(this);
                             
                              // lecture
                              while(!in.atEnd())
                              {
                                      listWidget->addItem(in.readLine());     
                              }
                             
                              setCentralWidget(listWidget);
                      }

                      int main(int argc, char *argv[])
                      {
                              QApplication app(argc, argv);
                             
                              MainWindow mainWindow;
                              mainWindow.show();
                             
                              return app.exec();
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 juillet 2007 à 18:47:44

                        Bon et bien sois je suis ***. Soit j'ai un probleme avec le PC.
                        (c'est peut être la faute de ce ***** de vista qui ne m'a apporté que des soucis jusque là ^^ )
                        Faut dire c'est pas mon ordinateur non plus.
                        Le fichier ne s'ouvre toujours pas! (avec un copier collé du programme que tu m'a donné)
                        J'ai replacé une petite boite de dialogue en cas d'erreur comme me la montré minirop et c'est malheureusement elle que je vois en premier :(
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 juillet 2007 à 18:52:54

                          Bon, déjà as-tu changé le nom du fichier parce que dans mon exemple, j'ai mis texte.txt mais ça peut être bien autre chose.
                          Après, as-tu vérifié que le fichier est bien dans le même dossier que l'éxécutable (sinon tu changes le chemin) ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 juillet 2007 à 18:54:30

                            Oui j'ai bien changé le nom du fichier et oui il est bien dans le meme dossier que l'executable.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 juillet 2007 à 19:37:25

                              et en mettant le fichier dans la racine de ton profil, sous XP c'est :
                              "C:\Documents And Settings\<user>"
                              ou en mettant le chemin complet (histoire de tester).
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 juillet 2007 à 21:01:46

                                Euh j'ai trouvé...
                                Désolé de vous avoir derangé.
                                Dans Vista quand on affiche en Détails les fichiers, l'extension(des fichiers texte) n'est pas marquée. Donc en voulant creer un fichier texte.txt par exemple , je creai un fichier texte.txt.txt. Seulement je ne le voyait pas en ouvrant ce fichier car il me le nommais seulement texte.txt.
                                Et dire que ca fait deux jours que je cherche !!!
                                Vraiment avec Vista j'ai que des problèmes!!
                                En tout cas, merci quand même de m'avoir aider et encore désolé de vous avoir deranger .. "pour rien"
                                • Partager sur Facebook
                                • Partager sur Twitter

                                [QT] Problème avec fichier

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown