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 :

Choisir entre un QTextEdit et un QTextStream

  1. #1
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut Choisir entre un QTextEdit et un QTextStream
    Bonjour à tous ,

    je suis devant un petit problème , j'ai un fichier .txt que je sélectionne via une boîte de dialogue . or de ce fichier je veux récupérer uniquement quelques lignes que je place dans une variables.

    Je ne voit pas ce que je doit choisir entre un QTextEdit et un QTextStream , je pencherais pour le QTextStream mais j'ai des erreurs de compilation lorsque j'appel ma méthode voici mon code :

    mainWindow.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    QString fichier = QFileDialog::getOpenFileName(0,"ouvrir un fichier",QString(),"Text(*.txt)");
     
            QFile fichierTest(fichier, this);
            if (fichierTest.open(QIODevice::ReadOnly))
             {
               //Opérations de lecture
     
              // _pStream = new QTextStream(&fichierTest);
             //  mafenetre fen(contenu,*_pStream,0);
             //  fen.show();
    mafenetre.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
    mafenetre::mafenetre(QString &contenu,QTextStream *st,QWidget *parent)
        :MainWindow(contenu,parent),text(contenu),pEtqStrea(st)
    {
       // ui->setupUi(this);
     
        text = contenu;
        pEtqStrea = st;
    recuperationMot(st);
    }
     
    QString mafenetre::recuperationMot(QTextStream texteAtester){
     
        QString str = "";
        bool bZone = false;
     
    textAtester.seek(0);
        QString strLine = texteAtester;
     
     
     
         while(!strLine.isNull())
        {
            if(strLine.contains("[ETIQUETTES]",Qt::CaseSensitive))
            {
                bZone = true;
                str ="";
                strLine = _pStream->readLine(); // On passe la ligne [COUCOU]
                strLine = _pStream->readLine(); // On passe la ligne 
            }
            if(strLine.contains("[FIN]", Qt::CaseSensitive))
            {
                bZone = false;
            }
            if(bZone)
            {
     
                str += strLine;
     
            }
            strLine = _pStream->readLine();
         }
     
     
     
        return strLine;
    quelqu'un pourrais m'aider svp merci par avance
    Bonne journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Déjà dit :
    Citation Envoyé par Winjerome Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mafenetre::mafenetre(QString &contenu,QWidget *parent=0)
        :MainWindow(contenu,parent),text(contenu)
    {
    /*    text=contenu; ligne totalement inutile, on a déjà initialisé
                              text dans la liste d'initialisation ci-dessus*/
    Et il en va de même ici pour pEtqStrea = st;
    Citation Envoyé par juniordev Voir le message
    mais j'ai des erreurs de compilation lorsque j'appel ma méthode
    Qui sont ... ?
    Je peux déjà voir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    afenetre::mafenetre(QString &contenu,QTextStream *st,QWidget *parent)
        :MainWindow(contenu,parent),text(contenu),pEtqStrea(st)
    {
        recuperationMot(st);
    vs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString mafenetre::recuperationMot(QTextStream texteAtester){
    Si cela ne concerne que la lecture/écriture, c'est en effet QTextStream. QTextEdit sert à l'affichage similairement à QLineEdit.

  3. #3
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    bonjour et merci de ta réponse Winjerome

    je n'ai pas compris la dernière partie de ton message avec mon constructeur de fenêtre et ma méthode

    L'erreur que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur : no matching function for call to `mafenetre::recuperationMot(QTextStream*&)'
    Merci par avance , bonne journée

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je l'ai pourtant mis en rouge, tu as un pointeur sur QTextStream d'un côté et un QTextStream de l'autre.

  5. #5
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    oui j'avais vu l'histoire du pointeur mais dès que je le retire c'est pire !
    il me met des erreurs partout , j'ai mis le "&" à la place et pareil
    je voit pas trop

  6. #6
    Invité
    Invité(e)
    Par défaut
    Quelles sont les nouvelles erreurs ? Et tes changements ?

  7. #7
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    Mes changements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mafenetre::mafenetre(QString &contenu,QTextStream &st,QWidget *parent)
        :MainWindow(contenu,parent),text(contenu),pEtqStrea(st)
    mes erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    erreur : cannot convert `QTextStream' to `QTextStream*' in initialization
     
    erreur : cannot convert `QTextStream' to `QTextStream*' in assignment
    erreur : `QTextStream::QTextStream(const QTextStream&)' is private
    erreur : within this context pour l'appel de la méthode
    erreur :   initializing argument 1 of `QString mafenetre::recuperationMot(QTextStream)'

  8. #8
    Invité
    Invité(e)
    Par défaut
    La classe QTextStream n'est pas copiable, c'est pourquoi tu obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur : `QTextStream::QTextStream(const QTextStream&)' is private
    (=> pour en savoir plus)

    Tu dois donc passer par un pointeur, ou une référence (préférable).

  9. #9
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    donc ce qui veut dire dans mon fenetre.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     QTextStream *pEtqStrea;
    et utiliser un pointeur dans fenetere.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mafenetre::mafenetre(QString &contenu,QTextStream *st,QWidget *parent)
        :MainWindow(contenu,parent),text(contenu),pEtqStrea(st)
    j'ai bien compris ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ainsi que dans ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString mafenetre::recuperationMot(QTextStream *texteAtester)
    Si tu espères pouvoir l’appeler ainsi :
    C'est ton erreur depuis le début.

  11. #11
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    Merci beaucoup !!! ça marche je n'ai plus d'erreurs de compilation

    bon par contre à l'exécution mon programme plante

    je pense que ça viens de mon MainWindow.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
    void MainWindow::rechercheFichier(){
     
     
        if(texte == ""){
            QMessageBox::information(this, "fichier", "OBJT NULLE : ");
            //ouverture de la boite de dialogue pour récupérer l'objet
            QString fichier = QFileDialog::getOpenFileName(0,"ouvrir un fichier",QString(),"Text(*.txt)");
     
            QFile fichierTest(fichier, this);
            if (fichierTest.open(QIODevice::ReadOnly))
             {
               //Opérations de lecture
               QString contenu = fichierTest.readAll();
     
               _pEtqStream = new QTextStream(&fichierTest);
               mafenetre fen(contenu,_pEtqStream,this);
               fen.show();
     
             }
             else {
               QMessageBox::information(this, "fichier", "le fichier ne s'est pas ouvert' : "+fichier);
              }
        }
     
    }

  12. #12
    Invité
    Invité(e)
    Par défaut
    As-tu pris en considération ce que je t'ai dit :
    Citation Envoyé par Winjerome Voir le message
    Ensuite :
    Citation Envoyé par juniordev Voir le message
    je fait dans mainWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mafenetre fen(contenu,this);
    alors que tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class mafenetre : public MainWindow { }
    mafenetre hérite de MainWindow, MainWindow ne devrait donc aucunement avoir à connaître sa classe dérivée, et encore moins l'utiliser.
    Je te conseille fortement de revoir ta conception à ce niveau
    ?
    Effectue un débogage, et repère précisément où se situe la problème.

  13. #13
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    effectivement je me rend comme que ma classe dérivée ne sert au final à rien ..

    J'ai mis ma methode de recuperationMot(QTextStream *textatester)
    dans le mainWindow

    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
    void MainWindow::rechercheFichier(){
     
     
        if(texte == ""){
            QMessageBox::information(this, "fichier", "OBJT NULLE : ");
            //ouverture de la boite de dialogue pour récupérer l'objet
            QString fichier = QFileDialog::getOpenFileName(0,"ouvrir un fichier",QString(),"Text(*.txt)");
     
            QFile fichierTest(fichier, this);
            if (fichierTest.open(QIODevice::ReadOnly))
             {
               //Opérations de lecture
               QString contenu = fichierTest.readAll();
               QTextStream ficSteam(&fichierTest);
               recuperationEtiquette(*ficSteam);
    }
    j'ai un petit problème de compilation .. encore avec les pointeurs je pense je vais essayer de voir

  14. #14
    Invité
    Invité(e)
    Par défaut
    Normal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTextStream ficSteam(&fichierTest);
    ceci n'est pas un pointeur, tu ne peux donc pas l'utiliser tel quel à la ligne suivante en lui mettant une étoile devant : *ficSteam.
    C'est l'adresse qu'il faut lui passer, en utilisant l'opérateur & :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recuperationEtiquette(&ficSteam);
    Mais suivant la durée de vie que tu souhaites lui donner, faire ceci pourrait être risqué car l'objet ficSteam a sa durée de vie limitée à la portée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (fichierTest.open(QIODevice::ReadOnly))
    {
        // existe seulement lorsque l'on se trouve à l'intérieur
    }
    // détruit dès qu'on sort, le pointeur ne sera plus utilisable
    Il faudra dans ce cas le créer avec new et s'occuper du delete lorsque tu n'en auras plus besoin.

  15. #15
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut
    d'accord donc de faire
    dans le mainWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     QTextStream *ficStream;
     
            QFile fichierTest(fichier, this);
            if (fichierTest.open(QIODevice::ReadOnly))
             {
               //Opérations de lecture
               QString contenu = fichierTest.readAll();
               *ficStream = new QTextStream(&fichierTest);
              QString result = recuperationEtiquette(&ficStream);
              QMessageBox::information(this, "fichier", "result : "+result);
     
             }
    je pleins d'erreurs de compilations par contre ..

  16. #16
    Invité
    Invité(e)
    Par défaut
    Je pense qu'une bonne révision des pointeurs ne te fera pas de mal.

  17. #17
    Membre confirmé
    Femme Profil pro
    Apprentie Développeuse
    Inscrit en
    Février 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Apprentie Développeuse
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 106
    Par défaut QStream et pointeurs
    Mon code marche parfaitement ! j'ai réussi à trouver moi-même mon erreur , mais merci Winjerome pour ton aide qui m'a vraiment débloqué

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

Discussions similaires

  1. Comment faire pour choisir entre plusieur elements d'un filelist ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 21/07/2006, 19h51
  2. Choisir entre email et ftp
    Par cjacquel dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 15/06/2006, 17h48
  3. [UML][Debutant]Choisir entre une classe et une interface ?
    Par Laurent Dardenne dans le forum Diagrammes de Classes
    Réponses: 11
    Dernier message: 24/04/2006, 21h45
  4. Choisir entre php et XSL
    Par vg33 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 15/04/2006, 03h40
  5. [FEDORA] Lequel choisir entre Fedora i386 et x86 pour un xeon?
    Par Oberon dans le forum RedHat / CentOS / Fedora
    Réponses: 7
    Dernier message: 13/07/2004, 15h52

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