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 :

Actualiser ouverture d'un QFile


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut [Résolu]Actualiser ouverture d'un QFile
    Bonjour à tous,

    Je viens de réaliser une interface ou j''affiche un fichier .txt.
    Grace à des QLineEdit ou des QSpinBox, j'enregistre des caractères dans ce fichier texte. Jusque là, tout marche très bien. Maintenant, je voudrais que mon fichier s'actualise sans avoir à quitter le programme et a le réouvrir.

    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
     
     
    QString tout_hdt;
    QFile file_hdt("HDT.txt");
    if(file_hdt.open(QIODevice::ReadOnly | QIODevice::Text)){
    QTextStream in_hdt(&file_hdt);
    tout_hdt = in_hdt.readAll();
    file_hdt.close();
    }
     
    fichier_hdt = new QTextEdit();
    fichier_hdt->setPlainText(tout_hdt);
    fichier_hdt->setReadOnly(true);
    fichier_hdt->setFont(QFont("Courier"));
    fichier_hdt->setLineWrapMode(QTextEdit::NoWrap);
     
    QVBoxLayout *vbox2 = new QVBoxLayout;
    vbox2->addWidget(fichier_hdt);
    Merci d'avance

  2. #2
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Salut,

    Je vois 2 possibilités:
    - Avec un QTimer tu réactualise régulièrement ton fichier
    - Ou mieux encore tu utilises la class QFileSystemWatcher qui permet de générer automatiquement un signal dé que le fichier est modifié.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour,

    Citation Envoyé par theory23 Voir le message
    Bonjour à tous,

    Je viens de réaliser une interface ou j''affiche un fichier .txt.
    Grace à des QLineEdit ou des QSpinBox, j'enregistre des caractères dans ce fichier texte. Jusque là, tout marche très bien. Maintenant, je voudrais que mon fichier s'actualise sans avoir à quitter le programme et a le réouvrir.
    Si je comprends bien, tu veux à la fois écrire et lire dans un même fichier ?
    Y'a risque de conflit là... Non ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Je veux écrire dans le fichier et une fois l'écriture faite, réactualiser ma fenetre pour qu'elle affiche ce qui vient d'etre écrit.

    J'essaye les deux solutions et je vous tiens au courant!

  5. #5
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Dans ce cas là, la solution la plus adaptée est : QFileSystemWatcher

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    J'ai essayé QFileSystemWatcher mais je n'arrive pas à le mettre en oeuvre..

    Quoique je mette comme path, je n'actualise pas la fenetre...

    Comment ferais-tu?

  7. #7
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Peux-tu mettre un peu de code, svp

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    J'utilise cela pour afficher le message dans la fenetre principale:

    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
     
    QString tout_hdt;
    QFile file_hdt("HDT.txt");
    if(file_hdt.open(QIODevice::ReadOnly | QIODevice::Text)){
    QTextStream in_hdt(&file_hdt);
    tout_hdt = in_hdt.readAll();
    file_hdt.close();
    }
     
    fichier_hdt = new QTextEdit();
    fichier_hdt->setPlainText(tout_hdt);
    fichier_hdt->setReadOnly(true);
    fichier_hdt->setFont(QFont("Courier"));
    fichier_hdt->setLineWrapMode(QTextEdit::NoWrap);
     
    QVBoxLayout *vbox2 = new QVBoxLayout;
    vbox2->addWidget(fichier_hdt);
    et dans une autre fonction, j'écris dans mon fichier de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QString code;
     
    QFile file("HDT.txt");
    if(file.open(QIODevice::Append | QIODevice::Text)){
     
    QTextStream out(&file);
    out<<code<<endl;
    }

  9. #9
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    il n'y a rien concernant la QFileSystemWatcher !!
    Quelquechose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    QFileSystemWatcher FileWatch//en global ou dans ta class princ
     
    // dans ton contructeur par example
    FileWatch.addPath(file_hdt)     
    connect(FileWatch, SIGNAL(fileChanged(const QString)), this, SLOT(slot_file_has_change(QString)));
     
    et ensuite 
     
    slot_file_has_change(QString my_file)
    {
     //  relire ici ton fichier qui vient de changer
    }

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Je n'y arrive toujours pas...

    J'ai fait:

    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
     
    void FenetrePrincipale{
     
    QFileSystemWatcher FileWatch;
    FileWatch.addPath("HDT.txt");
    connect(&FileWatch, SIGNAL(fileChanged(const QString)), this, SLOT(generer_code()));
     
    QString tout_hdt;
    QFile file_hdt("HDT.txt");
    if(file_hdt.open(QIODevice::ReadOnly | QIODevice::Text)){
    QTextStream in_hdt(&file_hdt);
    tout_hdt = in_hdt.readAll();
    file_hdt.close();
    }
     
    fichier_hdt = new QTextEdit();
    fichier_hdt->setPlainText(tout_hdt);
    fichier_hdt->setReadOnly(true);
    fichier_hdt->setFont(QFont("Courier"));
    fichier_hdt->setLineWrapMode(QTextEdit::NoWrap);
     
    QVBoxLayout *vbox2 = new QVBoxLayout;
    vbox2->addWidget(fichier_hdt);
     
    }
     
    void FenetrePrincipale::generer_code(){
    QFile file("hdt.txt");
    QString all;
    if(file.open(QIODevice::Append | QIODevice::Text)){
     
    QTextStream out(&file);
    out<<code<<endl;
    QTextStream in(&file);
    all = in.readAll();
    }
    }
    Dans mon connect, les deux parametres du signal et du slot ne sont pas les memes, c'est certainement la raison pour laquelle ça ne marche pas, mais comment faire? J'ai essayé de rajouter le parametre QString dans l'entete de ma fonction, rien à faire...

  11. #11
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    c'est quoi au just le probléme?
    Ca ne compile pas (dans ce cas quel est l'erreur)
    Ou ca ne fonctionne pas?

    Sinon attention à la porté de : QFileSystemWatcher FileWatch;
    Quand tu sort de ta fonction principale ton FileWatch n'existe plus.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Ca compile sans probleme mais meme si le fichier est modifié (le QString code rajoute des lignes), la fenetre ne s'actualise pas...

  13. #13
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Je ne comprend pas "le QString code rajoute des lignes" !

    La question est : passes-tu bien par la fonction "generer_code" quand ton fichier est modifié?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    oui je passe bien par la fonction "genere_code" quand mon fichier est modifié.
    C'est une fonction qui me génère un message et l'écrit dans un fichier texte.

    Et je n'arrive pas à ce qu'une fois que le fichier texte ait été modifié, ma fenetre principale puisse s'actualiser sans avoir a rouvrir et fermer mon programme.

  15. #15
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Là je ne comprend plus le probléme.
    Si tu passes bien par la fonction "generer_code" tu n'as à priori qu'à réactuliser, dans cette fonction, le QTextEdit() que je supose tu utilses pour afficher ton fichier

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Mais alors pour actualiser mon affichage, comment je peux faire?

  17. #17
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Quelquechose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void file_load(const QString &f,QTextEdit *text)
    {
      QFile file(f);
      if (file.open(QFile::ReadOnly | QFile::Text)) {
        text->setPlainText(file.readAll());
        file.close();
      }
    }

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Je réponds tardivement parce que j'avais arrêté le code, mais je viens de réessayer et cela a marché!

    Merci bcp!

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/10/2010, 03h48
  2. Réponses: 8
    Dernier message: 30/09/2010, 15h25
  3. [AC-2007] Pb d'actualisation à l'ouverture d'un formulaire
    Par tibofo dans le forum IHM
    Réponses: 1
    Dernier message: 01/08/2010, 17h14
  4. [BOXIr2] Actualisation d'un doc Webi à l'ouverture
    Par warriorfr dans le forum Webi
    Réponses: 2
    Dernier message: 29/02/2008, 23h11
  5. [HTML] Actualiser une page à l'ouverture
    Par xavax59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 15/09/2007, 12h45

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