Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt]Enregistrer un document Texte

ça ne marche pas...

Sujet résolu
    28 septembre 2008 à 21:39:31

    Bonjour,
    tout est dit dans le titre et dans le sous titre, donc, voici, les codes importants (sans le main.cpp)

    /*FenPrincipale.cpp*/
    
    #include "FenPrincipale.h"
    
    FenPrincipale::FenPrincipale()
    {
    
        QMenu *menuFichier = menuBar()->addMenu("&Fichier");
        QAction *actionQuitter = new QAction("&Quitter", this);
        menuFichier->addAction(actionQuitter);
        actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
        actionQuitter->setIcon(QIcon("quitter.png"));
    
        QMenu *menuEdition = menuBar()->addMenu("&Edition");
        choixPolice2 = new QAction("&Police...", this);
        menuEdition->addAction(choixPolice2);
        choixCouleur = new QAction("&Couleurs...", this);
        menuEdition->addAction(choixCouleur);
    
        QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
        QAction *afficherBE = new QAction("&Barre d' état", this);
        afficherBE->setCheckable(true);
        afficherBE->setChecked(true);
        menuAffichage->addAction(afficherBE);
    
        QToolBar *toolBarFichier = addToolBar("Fichier");
        toolBarFichier->addAction(actionQuitter);
    
        toolBarFichier->addSeparator();
    
        QFontComboBox *choixPolice = new QFontComboBox;
        toolBarFichier->addWidget(choixPolice);
        choixPolice->setEditable(false);
    
        QStatusBar *barreEtat = statusBar();
        barreEtat->showMessage("Prêt");
        actionQuitter->setStatusTip("Quitte le programme");
    
        QMdiArea *zoneCentrale = new QMdiArea;
    
        zoneTexte1 = new QTextEdit;
    
        QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(zoneTexte1);
    
        zoneCentrale->setViewMode(QMdiArea::TabbedView);
    
        QObject::connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
        QObject::connect(choixPolice2, SIGNAL(triggered()), this, SLOT(ouvrirDialogue()));
        QObject::connect(choixPolice, SIGNAL(currentFontChanged(QFont)), zoneTexte1, SLOT(setCurrentFont(QFont)));
        QObject::connect(choixCouleur, SIGNAL(triggered()), this, SLOT(save()));
        QObject::connect(afficherBE, SIGNAL(stateChanged(int)), barreEtat, SLOT(hide()));
    
        setCentralWidget(zoneCentrale);
    
    
    
    }
    void FenPrincipale::ouvrirDialogue()
    {
        bool ok = false;
    
        QFont police = QFontDialog::getFont(&ok, zoneTexte1->font(), this, "Choisissez une police");
    
        if (ok)
        {
            zoneTexte1->setFont(police);
        }
    }
    void FenPrincipale::Save()
    {QString fileName = QFileDialog::getSaveFileName(this,
                             tr("Choose a file name"), ".",
                             tr("Texte(*.txt)"));
     char texte[2000] = zoneTexte1->text();
    
         if (fileName.isEmpty())
             return;
             FILE* fichier = NULL;
    
             fichier = fopen(fileName, "a");
    
        if (fichier != NULL)
        {
            fprintf(fichier, texte );
    
            fclose(fichier);
        }
        else
        {
            QMessageBox::critical(this, "Erreur", "Impossible d'enregistrer le fichier!");
        }
    
    }
    


    /*FenPrincipale.h*/
    
    #ifndef HEADER_FENPRINCIPALE
    #define HEADER_FENPRINCIPALE
    
    #include <QtGui>
    #include <stdlib.h>
    #include <stdio.h>
    
    class FenPrincipale : public QMainWindow
    {
    	Q_OBJECT
    
    	public:
    		FenPrincipale();
    
        public slots:
            void ouvrirDialogue();
            void Save();
    
    	private:
        QAction *choixPolice2;
        QTextEdit *zoneTexte1;
        QAction *choixCouleur;
    
    };
    
    
    #endif
    


    Voila... et le compilateur me dit:

    Setting up a MinGW/Qt only environment...
    -- QTDIR set to H:\Qt\4.4.1
    -- PATH set to H:\Qt\4.4.1\bin
    -- Adding H:\MinGW\bin to PATH
    -- Adding H:\WINDOWS\System32 to PATH
    -- QMAKESPEC set to win32-g++
    
    mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory `c'est caché!!'
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
    DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..
    \Qt\4.4.1\include\QtCore" -I"..\..\Qt\4.4.1\include\QtCore" -I"..\..\Qt\4.4.1\in
    clude\QtGui" -I"..\..\Qt\4.4.1\include\QtGui" -I"..\..\Qt\4.4.1\include" -I"." -
    I"h:\Qt\4.4.1\include\ActiveQt" -I"debug" -I"." -I"..\..\Qt\4.4.1\mkspecs\win32-
    g++" -o debug\FenPrincipale.o FenPrincipale.cpp
    FenPrincipale.cpp: In constructor `FenPrincipale::FenPrincipale()':
    FenPrincipale.cpp:43: warning: unused variable 'sousFenetre1'
    FenPrincipale.cpp: In member function `void FenPrincipale::Save()':
    FenPrincipale.cpp:73: error: 'class QTextEdit' has no member named 'text'
    FenPrincipale.cpp:79: error: cannot convert `QString' to `const char*' for argum
    ent `1' to `FILE* fopen(const char*, const char*)'
    mingw32-make[1]: *** [debug/FenPrincipale.o] Error 1
    mingw32-make[1]: Leaving directory `Je l'ai cachée...'
    mingw32-make: *** [debug] Error 2
    
    H:\MesProjets\PVF>


    Voila, merci de vos réponses...
    • Partager sur Facebook
    • Partager sur Twitter

    L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

      29 septembre 2008 à 3:47:08

      remplace ça :
      char texte[2000] = zoneTexte1->text();
      


      par :

      QString texte = zoneTexte1->toPlainText();
      


      et aussi, on est en C++ et non en C, donc lis ce magnifique tutoriel ^^ et remplace moi ça :

      if (fileName.isEmpty())
               return;
               FILE* fichier = NULL;
      
               fichier = fopen(fileName, "a");
      
          if (fichier != NULL)
          {
              fprintf(fichier, texte );
      
              fclose(fichier);
          }
          else
          {
              QMessageBox::critical(this, "Erreur", "Impossible d'enregistrer le fichier!");
          }
      


      par :

      if (fileName.isEmpty())
               return;
               std::ofstream fichier(filename.toStdString(), std::ios::out | std::ios::trunc);
      
          if (fichier)
          {
              fichier << texte.toStdString();
          }
          else
          {
              QMessageBox::critical(this, "Erreur", "Impossible d'enregistrer le fichier!");
          }
      


      en oubliant pas d'inclure fstream :

      #include <fstream>
      


      Voilà ! :D
      Note que j'ai pas testé le code mais ça devrait théoriquement fonctionner.
      • Partager sur Facebook
      • Partager sur Twitter
      Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
        29 septembre 2008 à 17:00:28

        error: 'toStdString' has not been declared
        error: request for member of non-agregate type before'(' token


        Voila les 2 erreurs qu' il reste...

        Voila...

        <edit><horsSujet>Ton avatar fait peur >_< </horsSujet></edit>
        • Partager sur Facebook
        • Partager sur Twitter

        L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

          29 septembre 2008 à 21:47:52

          Désolé mais je ne comprends pas... ça veut dire quoi? o_O
          • Partager sur Facebook
          • Partager sur Twitter

          L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

            29 septembre 2008 à 22:19:57

            Tu peux faire comme ça pas exemple :
            //on récupére l'adresse du fichier
                QString fichier = QFileDialog::getSaveFileName(this, "Enregistrer un fichier");
                if (fichier.isEmpty()) return;
                QFile file(fichier);
            
                if (file.open(QFile::WriteOnly | QFile::Truncate)) // si l'ouverture s'est bien passée
                {
                    // permet d'écrire dans le fichier
                    QTextStream out(&file);
                    out << texte->toStdString();
                    file.close();
                }
            
                else
                    QMessageBox::warning(this,"Erreur","Une erreur s'est prosuite lors de l'ouverture du fichier");
            
            • Partager sur Facebook
            • Partager sur Twitter
              30 septembre 2008 à 16:32:11

              Voila la seule erreur qu' il reste (on progresse, on progresse ^^ )

              error: 'class QTextEdit' has no member named 'toStdString'


              Si je comprends bien ton code, tu extrais le texte du QTextEdit pour en faire un QString et tu écris ce QString dans un fichier?

              et si je comprends bien le compilateur(hé oui je met du temps :-° ) il dit que pour extraire du texte d' un QTextEdit, il ne faut pas appeler 'toStdString' ?

              J'espère que j' ai bien compris(dans le cas contraire, ne m' insultez pas svp :euh: )

              Sur ce, au revoir(enfin facon de parler je suis toujours là :p )!!
              • Partager sur Facebook
              • Partager sur Twitter

              L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                30 septembre 2008 à 17:08:45

                ils avaient considérés que "texte" était de type QString (qui de toute manière n'a pas besoin de "toStdString").

                comme c'est un QTextEdit, tu fais :
                out << texte->toPlainText();
                
                • Partager sur Facebook
                • Partager sur Twitter
                  30 septembre 2008 à 17:18:26

                  Yipiiiiiiiiiiiiiiiiiiie!!!! :):):):):):):):):):):D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D
                  Encore un problème de résolu!!!!!

                  Merci beaucoup les ... les quoi d'ailleurs? o_O
                  je voulais dire les Zér0s mais non puisque vous êtes super fort ^^

                  bin Merci!!

                  et au revoir!! :D:D:D:D:D:D:D:D
                  • Partager sur Facebook
                  • Partager sur Twitter

                  L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

                  [Qt]Enregistrer un document Texte

                  × 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