Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] comment afficher un .txt à partir de son adresse?

Sujet résolu
    1 juin 2008 à 13:53:36

    Bonjour,
    je n'arrive pas à trouver la solution pour afficher un document de type .txt directement à partir de l'adresse de son emplacement. Pour l'instant, j'arrive seulement à ouvrir une fenetre où il y a la liste des fichiers présents dans le dossier spécifié (ds le getopenfilename)puis à afficher un document .txt dans un mdi en cliquant sur ouvrir, mais j'aimerais que cela ouvre directement le fichier .txt dont j'aurai précisé l'adresse dans mon programme sans avoir l'affichage de la fenetre avec la liste de tous les documents du dossier où se situe mon fichier.
    Si quelqu'un pouvait m'aider rapidement ça serait super.
    • Partager sur Facebook
    • Partager sur Twitter
      1 juin 2008 à 14:07:48

      Salut,

      Tu as du code à nous montrer ?
      Sinon on ne peut pas dire grand chose, à part te renvoyer vers la doc' :
      QFile file("in.txt");
      if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;
      
      QTextStream in(&file);
      while (!in.atEnd()) {
        QString line = in.readLine();
        process_line(line);
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        1 juin 2008 à 14:36:12

        Voila le code de MaFenetre.cpp

        void MaFenetre::ouvrir() 
        
        {
        
        	
        	QString fileName = QFileDialog::getOpenFileName(this,"ddocument.txt","/home/");
             if (!fileName.isEmpty()) {
                  FilsMDI *existing = findMdiChild(fileName);
                 if (existing) {
                     workspace->setActiveWindow(existing);
                     return;
                 } 
        
                 FilsMDI *filsmdi = createMdiChild();
                 if (filsmdi->chargerFichier(fileName)) {
                     filsmdi->showMaximized();
                 } else {
                     filsmdi->close();
                 }
        	 }
         
        }
          
        FilsMDI *MaFenetre::createMdiChild()
         {
             FilsMDI *child = new FilsMDI;
             workspace->addWindow(child);
        
             return child;
         }
        
        
        FilsMDI *MaFenetre::findMdiChild(const QString &fileName)
         {
             QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath();
        
             foreach (QWidget *window, workspace->windowList()) {
                 FilsMDI *fils = qobject_cast<FilsMDI *>(window);
                 if (fils->currentFile() == canonicalFilePath)
                     return fils;
             }  
             return 0; 
         }
        


        et voila le filsMDI.cpp

        bool FilsMDI::chargerFichier(const QString &fileName) 
        {
        QFile file(fileName);
          curFile = QFileInfo(fileName).canonicalFilePath();
        
          file.open(QFile::ReadOnly | QFile::Text);
          if (!file.open(QFile::ReadOnly | QFile::Text)) {
                 QMessageBox::warning(this, tr("MDI"),
                                      tr("Cannot read file %1:\n%2.")
                                      .arg(fileName)
                                      .arg(file.errorString()));
                 return false;
             }
         
        	
        
             QTextStream in(&file);
             QApplication::setOverrideCursor(Qt::WaitCursor);
             zoneTexte->setPlainText(in.readAll());
             QApplication::restoreOverrideCursor();
         
        }
        


        en fait j'ai utilisé un code que j'ai trouvé sur internet en l'adaptant à mon projet et comme je débute avec Qt j'ai quelques difficultés. j'ai fait des recherches sur les forums mais je voyais pas comment adapter les commentaires à mon projet.
        J'ai testé ce que tu as proposé mais il me retourne une erreur à propos du process_line.
        Merci pour ton aide
        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2008 à 15:27:30

          Citation :

          en fait j'ai utilisé un code que j'ai trouvé sur internet en l'adaptant à mon projet et comme je débute avec Qt j'ai quelques difficultés. j'ai fait des recherches sur les forums mais je voyais pas comment adapter les commentaires à mon projet.


          Ca me semble être une très mauvaise façon de faire.
          Apprend à te servir d'abord de chaque outils indépendamment du reste avant d'assembler les morceaux, ce sera plus solide !

          Citation :

          J'ai testé ce que tu as proposé mais il me retourne une erreur à propos du process_line.


          Oui ce n'est peut être pas très explicite mais process_line() n'existe tout simplement pas, c'est juste pour dire "faite ici le traitement que vous voulez sur la chaîne".
          Tu peux faire à la place: cout << line.toStdString() pour l'afficher par exemple.
          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2008 à 17:25:33

            je suis d'accord, ce n'est pas la meilleure méthode, mais j'ai très peu pour finir ça et je pense qu'il ne manque pas grand chose. J'ai essayé ce que tu m'as dit mais en vain :(
            • Partager sur Facebook
            • Partager sur Twitter
              1 juin 2008 à 17:47:20

              Qu'est-ce qui ne fonctionne pas ? la compilation ? ça plante ? pas le résultat escompté ? faut être plus précis ;)

              Exemple complet (fautes de frappe possible):
              #include <QApplication>
              #include <QTextEdit>
              #include <QFile>
              #include <QTextStream>
              
              int main(int argc,char *argv[])
              {
                QApplication app(argc,argv);
              
                QTextEdit textEdit;
              
                QFile file("../Qt/test/main.cpp"); // ton fichier
                file.open(QIODevice::ReadOnly | QIODevice::Text);
              
                QTextStream in(&file);
                while(!in.atEnd())
                  textEdit.insertPlainText(in.readLine() + '\n');
              
                textEdit.show();
              
                return app.exec();
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                1 juin 2008 à 20:27:47

                Bon j'ai rendu mon code un peu plus propre donc voila ce que j'ai fait suite à tes conseils :
                voila le code pour ouvrir le mdi et qui se trouve dans mafenetre.cpp :
                void MaFenetre::ouvrir() 
                
                {
                
                	 QString fileName = "file/bonjour.txt";
                	 FilsMDI *child = createMdiChild();
                         child->chargerFichier(fileName);
                         child->showMaximized();
                		            
                 
                }
                  
                 
                FilsMDI *MaFenetre::createMdiChild()
                 {
                     FilsMDI *child = new FilsMDI;
                     workspace->addWindow(child);
                	 
                     return child;
                
                }
                


                la fonction "ouvrir" étant un slot.
                Ensuite voila le FilsMDI.cpp qui créé le mdi :

                FilsMDI::FilsMDI() 
                {
                  
                	
                	
                  QHBoxLayout *layout = new QHBoxLayout;
                  layout->setSpacing(2);
                
                  zoneTexte = new QTextEdit();
                  zoneTexte->setAcceptRichText(true);
                  zoneTexte->setFrameStyle(QFrame::StyledPanel);
                
                  
                  layout->addWidget(zoneTexte);
                  setLayout(layout);
                
                 
                }
                
                
                /* Charger un fichier */ 
                 
                void FilsMDI::chargerFichier(const QString &fileName) 
                {
                  
                    QFile file(fileName);
                    file.open(QIODevice::ReadOnly | QIODevice::Text);
                	 
                    QTextStream in(&file);
                    while (!in.atEnd()) {
                		          zoneTexte->insertPlainText(in.readLine() + '\n');
                		        }
                
                	   
                }
                


                je viens de le tester ça marche bien.
                Merci beaucoup tu m'as vraiment bien aidé.
                @ bientot
                • Partager sur Facebook
                • Partager sur Twitter

                [Qt] comment afficher un .txt à partir de son adresse?

                × 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